我想通过设置默认值我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
更新:
如果你想直接获得这个答案中使用的引用,这里是:
这对我有用:
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
.
如果您仍在努力解决这个问题,请在评论中告诉我.
| 归档时间: |
|
| 查看次数: |
20959 次 |
| 最近记录: |