2014-09-19 107 views
4

我有来自后端的数据列表,我想更新视图中的选择值,这是因为某些原因没有发生。在ng选项中选择不更新

我试过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/

+0

你为什么没有在这里发布你的代码? – Satpal 2014-09-19 12:30:15

回答

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

+2

我试过这个,但它不工作。即使我在演示中看到它不会更新。你能重新检查吗? – 2014-09-19 12:41:04

+3

对象不更新,但是我没有看到选择选项中的更新值,这是我的问题:) – 2014-09-19 12:44:02

+0

在您的演示中不起作用 – sbedulin 2016-02-01 13:04:28

0

你在你的代码:

$scope.options = [{ 
    "id": "id1", 
    "name": "p1" 
}, { 
    "id": "id2", 
    "name": "p2" 
}]; 

$scope.data = [{ 
    "name": "data1", 
    "option": { 
     "id": "id1", 
     "name": "p1" 
    } 
}]; 

但角度并不知道,在$scope.options收集使用过的第一选择对象是相同$scope.data使用option

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

  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"和初始化像"option": $scope.options[0]$scope.data选项,但因为它是未来从后端您可能需要手动修复引用。

选项1是更好的恕我直言。

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