一尘不染

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

angularjs

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

angular

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];
});

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>

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


阅读 318

收藏
2020-07-04

共1个答案

一尘不染

更新:

如果您想直接获得此答案中使用的参考,则为:

参考: 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] ];
});

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

朋克: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>

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

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

随便看看:http
://plnkr.co/edit/NKLXrwqwk36YfhBSXILN?p=preview

请注意,我什至不需要该name属性。它只是用于稍后创建适当的对象,但实际上现在不需要匹配,请尝试不使用它!

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

查看它以获得更多理解-强烈建议:

AngularJS ng-options中的初始选择

如果您仍在努力,请在评论中让我知道。

2020-07-04