我正在尝试使用'音轨。表达式,用于在对象数组中按id跟踪选择。但是,我似乎无法让它像我认为的那样有效。
//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>
所以基于documentation我虽然加载的选项指令会看到serverDTO有&#39;跟踪&#39; 1,2和3的ID,并具有预先选择的ID。在用户修改选择后,我需要执行类似的操作将数组返回到服务器 -
//recreate proper DTO [1,2,3];
$scope.serverDTO = $scope.serverDTO.map(function(val){
return val.id;
});
关于这应该如何运作,我是否会离开?
答案 0 :(得分:38)
track by
只是在内部帮助Angular进行数组排序。选项的值由第一个参数定义(在您的情况下为item
)。如果您希望它是id,那么您应该使用item.id as item.name for item in items
答案 1 :(得分:7)
“track by”在ng-options数组对象和模型中也很有用。但您不希望通过模型中对象的引用来选择轨道选项。使用“track by”指示您按所需的模型字段跟踪选项。
在你的情况下使用“track by”$ scope.serverDTO必须像{id:1,name:“test”}