所以这对我来说有些奇怪。 Angular支持通过引用选择,但不支持按值选择。
这是我的理由以及为什么我有点困惑:
我有一张用于编辑模型的表单。我以JSON格式的ajax获取模型和一个模型属性的可能值列表。
模型属性包含一个值,并且相同的值在列表中,因此在阅读API之前我认为ng-model绑定将负责为我选择正确的项目,但是我错了。 AngularJS API用于选择状态Note: ngModel compares by reference, not value. This is important when binding to an array of objects.
现在我陷入了如何做到这一点的两难境地。最简单的"解决方案我认为是迭代列表(可能包含多达500多个项目)并比较属性,直到找到我正在寻找的那个。那将是非常缓慢的。
以下是发生了什么的原始示例:plunker
我该怎么办?
答案 0 :(得分:1)
仔细检查AngularJS API for select后,我注意到了这个ngOptions
表达式示例:select as label group by group for value in array track by trackexpr
并尝试了许多表达式,我找到了一个适合我的表达式。由于我的所有对象都有一个id属性,我只需使用ng-options="item.text for item in items track by item.id"
即可。
可悲的是,我还没有想出用angular-ui-select2做同样的方法。
可以在plunker
上找到完整的示例答案 1 :(得分:0)
为什么不在选择字段上使用ng-model并将所选对象存储在那里?然后只需将模型的值设置为您感兴趣的所选对象的字段?
<select ng-model="selected" ng-options="opt as opt.label for opt in options"></select>
// in controller
$scope.options = // $resource.get or whatever to fetch data
$scope.selected = $scope.options[0];
$scope.yourModel.valueYouWantToPersist = $scope.selected.valueYouWantToPersist;
您可以在获取数据之前将占位符元素放在选项字段的开头,这将有一些空值表明用户没有选择任何内容,或者您可以将$ scope.selected设置为null ,它仍然可以正常工作。由于数据绑定,yourModel.valueYouWantToPersist将更新为$ scope.selected更新,您不必搜索选定对象的选项字段。
对我来说感觉很对,抱歉,如果这个答案对你不起作用,我对Angular仍然有点新鲜,说实话,不太确定我是否完全理解你的问题。只需使用您的代码尝试此解决方案,我认为它应该有效。