我有来自后端的数据列表,我想更新视图中由于某种原因没有发生的选择值。
我尝试ng-selected
效率不高,有时模型更新spmetimes没有。
这是我的代码,有人可以帮忙吗?
<div class="listitem" ng-repeat="d in data">
{{d.name}}:
<select
ng-model="d.option"
ng-options="d.name for d in options"></select>
</div>
控制器
var myApp = angular.module('myApp', []);
myApp.controller("SomeController", function($scope) {
$scope.options = [{
"id": "id1",
"name": "p1"
}, {
"id": "id2",
"name": "p2"
}];
$scope.data = [{
"name": "data1",
"option": {
"id": "id1",
"name": "p1"
}
}];
});
答案 0 :(得分:3)
您需要使用select as label group by group for value in array track by trackexpr
,阅读DOCs
ng-options="option.name for option in options track by option.id"
DEMO,但请注意,这不适用于Angualrjs 1.1
答案 1 :(得分:0)
您的代码中包含:
$scope.options = [{
"id": "id1",
"name": "p1"
}, {
"id": "id2",
"name": "p2"
}];
$scope.data = [{
"name": "data1",
"option": {
"id": "id1",
"name": "p1"
}
}];
但Angular不知道$scope.options
集合中使用的第一个选项对象与option
中使用的$scope.data
相同。
我可以建议两种解决方案:
在$scope.data
仅保留选项标识"option": "id1"
,在ng-options
中使用d.id as d.name for d in options
在ng-options
中使用"ng-options="d as d.name for d in options"
并初始化$scope.data
等"option": $scope.options[0]
选项,但由于它来自后端,您可能需要手动修复引用。
选项1更好恕我直言。
编辑:示例JSFIDDLE是在Angular 1.1中创建的,如果你使用Angular 1.2或更高版本@Satpal track by
答案也是不错的选择(没有双关语)。