the*_*ing 26 javascript angularjs ng-options
我正在尝试使用'track by'表达式来跟踪对象数组中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>
Run Code Online (Sandbox Code Playgroud)
因此,基于文档,我认为加载的选项指令会看到serverDTO具有1,2和3的'track by'id,并且具有预先选择的那些.用户修改选择后,我需要做这样的事情,将数组返回给服务器 -
//recreate proper DTO [1,2,3];
$scope.serverDTO = $scope.serverDTO.map(function(val){
return val.id;
});
Run Code Online (Sandbox Code Playgroud)
我是否应该如何工作呢?
jra*_*ede 39
track by
据我所知,只是在内部帮助Angular进行数组排序.选项的值由第一个参数定义(在您的情况下item
).如果你希望它是由id,那么你应该使用item.id as item.name for item in items
当在ng-options对象数组和模型中使用对象时,"track by"非常有用.但您不希望通过模型中对象的引用来选择轨道选项.使用"track by"指示您按所需的模型字段跟踪选项.
在你的情况下使用"track by"$ scope.serverDTO必须像{id:1,name:"test"}