ng-option中的select不会更新

时间:2014-09-19 12:27:04

标签: angularjs select ng-options

我有来自后端的数据列表,我想更新视图中由于某种原因没有发生的选择值。

我尝试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"
        }
    }];
});

http://jsfiddle.net/gFCzV/58/

2 个答案:

答案 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相同。

我可以建议两种解决方案:

  1. $scope.data仅保留选项标识"option": "id1",在ng-options中使用d.id as d.name for d in options

  2. ng-options中使用"ng-options="d as d.name for d in options"并初始化$scope.data"option": $scope.options[0]选项,但由于它来自后端,您可能需要手动修复引用。

  3. 选项1更好恕我直言。

    编辑:示例JSFIDDLE是在Angular 1.1中创建的,如果你使用Angular 1.2或更高版本@Satpal track by答案也是不错的选择(没有双关语)。