Angular,如何从列表中选择使用ajax检索的项目

时间:2014-08-07 20:19:43

标签: ajax angularjs selection

所以这对我来说有些奇怪。 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

我该怎么办?

2 个答案:

答案 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仍然有点新鲜,说实话,不太确定我是否完全理解你的问题。只需使用您的代码尝试此解决方案,我认为它应该有效。