我正在尝试使用“ 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的’track by’ID为1、2和3,并已对其进行了预先选择。用户修改选择后,我需要执行以下操作将数组返回到服务器-
//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
track by
item
item.id as item.name for item in items