ngOptions "track by" expression

ngOptions "track by" expression

本文关键字:quot expression by track ngOptions      更新时间:2023-09-26

我正试图使用'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>

因此,根据文档,我认为加载时的options指令会看到serverDTO具有1、2和3的"track-by"ID,并预先选择了这些ID。在用户修改选择后,我需要做这样的事情来将数组返回到服务器-

//recreate proper DTO [1,2,3];
$scope.serverDTO = $scope.serverDTO.map(function(val){
  return val.id;
});

我是不是偏离了应该如何工作?

据我所知,track by只是在内部帮助Angular进行数组排序。选项的值由第一个参数定义(在您的情况下为item(。如果您希望它是按id,那么您应该使用item.id as item.name for item in items

当在对象和模型的ng选项数组中也使用对象时,"track-by"是有用的。但您不希望通过模型中对象的引用来跟踪选项。使用"track by"可以指出,您可以通过所需的模型字段来跟踪选项。

在您使用"track by"$scope.serverDTO的情况下,它必须类似于{id:1,name:"test"}