一尘不染

ngOptions“跟踪依据”表达式

angularjs

我正在尝试使用“ 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;
});

我是否应该解决这个问题?


阅读 235

收藏
2020-07-04

共1个答案

一尘不染

track by据我所知,它只是在内部帮助Angular实现数组排序。选项的值由第一个参数定义(在您的情况下item)。如果您希望通过ID进行标识,则应使用item.id as item.name for item in items

2020-07-04