Javascript AngularJS-模型和选项不同时的多选选项

Javascript AngularJS-模型和选项不同时的多选选项,javascript,angularjs,Javascript,Angularjs,我有多个选择框供用户选择他的角色 <select ng-options="role.name for role in roles" ng-model="user.roles" multiple="multiple"> </select> “角色”-是用户可以选择的角色列表 [{“id”:1,“name”:“版主”},{“id”:2,“name”:“Admin”}] “user.roles”-用户实际拥有的角色列表 {“id”:5,“电

我有多个选择框供用户选择他的角色

<select ng-options="role.name for role in roles"
        ng-model="user.roles"
        multiple="multiple">
</select>

“角色”-是用户可以选择的角色列表

[{“id”:1,“name”:“版主”},{“id”:2,“name”:“Admin”}]

“user.roles”-用户实际拥有的角色列表

{“id”:5,“电子邮件”:la@la.la“,”角色“:[{“id”:2,“name”:“Admin”}]}

“角色”和“用户”都是通过ajax动态加载的。
问题是,当我加载已经有角色的用户时,它们不会在选择框中自动选择。如何选择它们?

我认为唯一的问题是角色不应该包含任何内容,而应该包含密钥

"roles":[{"id":2}]
以下是如何使用多选:

您需要在数据中选择什么。User.roles应为所选数据

HTML:


你对angular的看法是什么

在angular 1.0.X中,angular检查项是否严格相等(因此角色必须是ng模型中的同一实例和数组中的选定项)

如果您使用的是angular(1.2.x)的最新版本,则可以在ng选项中使用“跟踪方式”:

<select
    ng-options="role.name for role in roles track by role.name"
    ng-model="user.roles"
    multiple>
</select>


看这把小提琴:

好的,我找到了解决办法。如果有人能提出更好的解决方案,请张贴出来

用于检查给定角色数组中是否存在角色的函数

$scope.isRoleContains = function(roles, roleToFind) {
    var is = false;
    angular.forEach(roles, function(role) {
        if (role.name == roleToFind.name)
            is = true;
    });
    return is;
}
更新的选择框

<select ng-model="user.roles" multiple="multiple">
    <option ng-repeat="role in roles" ng-selected="isRoleContains(user.roles, role)">
        {{ role.name }}
    </option>
</select>

{{role.name}

hi,将其加入到混合物中:

演示:

键是ng选项的设置(声明键值是什么)


对不起,这看起来像是标准答案,我没有找到我问题的答案
$scope.isRoleContains = function(roles, roleToFind) {
    var is = false;
    angular.forEach(roles, function(role) {
        if (role.name == roleToFind.name)
            is = true;
    });
    return is;
}
<select ng-model="user.roles" multiple="multiple">
    <option ng-repeat="role in roles" ng-selected="isRoleContains(user.roles, role)">
        {{ role.name }}
    </option>
</select>
   <select 
        multiple="multiple" 
        ng-options="obj.name as obj.name for obj in roles" 
        ng-model="user.roles">
</select>