如何设置ng-options的默认值(多选)

lva*_*yut 10 angularjs

我想通过设置默认值我NG选项ng-init,ng-model等他们并没有在所有的工作.我的代码如下:

var app = angular.module('role', []);

app.controller('fooController', function($scope){
    $scope.roles = [{id:1, name:"Administrator"}, {id:2, name: "Student"}];
    $scope.user.roles = $scope.roles[0];
});
Run Code Online (Sandbox Code Playgroud)

HTML

<body data-ng-app="role" data-ng-controller="fooController">
  <select multiple class="form-control" data-ng-model="user.roles" data-ng-options="role.name for role in roles" required=""></select>
</body>
Run Code Online (Sandbox Code Playgroud)

这是我的Plunkr. 任何帮助,将不胜感激.

Mel*_*igy 14

更新:

如果你想直接获得这个答案中使用的引用,这里是:

参考: 初始选择在带有轨迹的AngularJS ng-options中

这对我有用:

app.controller('fooController', function($scope){
    $scope.roles = [{id:1, name:"Administrator"}, {id:2, name: "Student"}];
    $scope.user = {};
    $scope.user.roles = [ $scope.roles[0] ];
});
Run Code Online (Sandbox Code Playgroud)

user没有初始化的插件中有一个错误,除此之外,Angular会将ng-options数组中的每个对象与数组中的每个元素进行比较ng-model.JavaScript比较不是Angular比较,即使在JavaScript中使用相同的属性比较2个对象也会返回false(不同的对象).

Plunk:http://plnkr.co/edit/ccsAVvPACnN6Qzje7HcB?p =preview

.

现在,这并不理想.通常你想根据ID左右来关联这些,这是另一种方式:

在HTML中,用于track by告诉AngularJS比较ID而不是整个对象:

  <select multiple class="form-control" 
    data-ng-model="user.roles" 
    data-ng-options="role.name for role in roles track by role.id" 
    required=""></select>
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中,您可以使用任何对象而不实际位于数组中:

app.controller('fooController', function($scope){
    $scope.roles = [{id:1, name:"Administrator"}, {id:2, name: "Student"}];
    $scope.user = {};
    $scope.user.roles = [ {id:1, name:"Administrator"} ];
});
Run Code Online (Sandbox Code Playgroud)

Plunk:http://plnkr.co/edit/NKLXrwqwk36YfhBSXILN?p =preview

请注意,我甚至不需要该name属性.它只是为了以后制作一个合适的物体,但现在真的不需要匹配,试试没有它!

.

我写了一个详细的教程,附带关于这个初始选择问题及其变化的视频.它专注于单选,但多选只是直接使用对象数组而不是一个对象.

检查一下以获得更多理解 - 强烈推荐:

在AngularJS ng-options中的初始选择与track by

.

如果您仍在努力解决这个问题,请在评论中告诉我.