javascript - array - ngOptions "track by" expresión
ng-options value (2)
Estoy tratando de usar la expresión ''track by'' para rastrear las selecciones por id, en una matriz de objetos. Sin embargo, parece que no puedo hacer que funcione como creo que funciona.
//ids from server
$scope.serverDTO = [''1'',''2'',''3''];
//composed objects from the ID set
$scope.composedData = [{id:1,name:"test"},{id:2,name:"test"},{id:3,name:"test"}];
<!-- select box -->
<select ng-model="serverDTO" ng-options="item as item.name for item in composedData track by item.id"></select>
Entonces, en base a la documentation pensé que la directiva de opciones sobre la carga vería que el serverDTO tiene los identificadores de ''seguimiento por'' de 1, 2 y 3, y los ha seleccionado previamente. Después de que el usuario modifique la selección, tendría que hacer algo como esto para devolver la matriz al servidor:
//recreate proper DTO [1,2,3];
$scope.serverDTO = $scope.serverDTO.map(function(val){
return val.id;
});
¿Estoy lejos de cómo se supone que funciona esto?
"seguimiento por" es útil cuando en la matriz de objetos y modelos de ng-options también se usa el objeto. pero no desea opciones de seguimiento por la referencia del objeto en el modelo. Al usar "seguimiento por", señala que rastrea las opciones por el campo deseado del modelo.
en su caso con "track by" $ scope.serverDTO debe ser como {id: 1, name: "test"}
track by
simplemente ayuda a Angular internamente con la ordenación de matrices, que yo sepa. El valor de las opciones está definido por el primer argumento (en su item
caso). Si desea que sea por ID, debe usar item.id as item.name for item in items