这听起来像你想ngChecked指令。也许是这样的:
<input type="checkbox"
ng-model="UserDetails[m]"
ng-checked="currentUsersRoles.indexOf(m) >= 0" /> {{ m }}
但是,当复选框被选中或取消选中有用户的角色信息更新时,可能需要略微不同的结构。
比方说,你currentUser
,而不必角色数组有一个角色的属性,它在你的控制器是这样一个对象的值:
$scope.currentUser.rolesObj = {
"Public": true,
"Reporter": false,
"Partner": false,
"LCSP": false,
"Admin": false,
"StrategicPursuit": false,
"PA": false
};
然后创建您的复选框的列表:
<label ng-repeat="(role, value) in currentUser.rolesObj">
<input type="checkbox" ng-model="value" /> {{ role }}
</label>
这应该让您的用户的角色与复选框保持同步。如果你没有在你的用户数据结构多的控制,你总是可以编写建立一个currentUser角色对象使用现有的阵列功能:
$scope.rolesObjFromArray = function (rolesArr) {
var rolesObj = {
"Public": false,
"Reporter": false,
"Partner": false,
"LCSP": false,
"Admin": false,
"StrategicPursuit": false,
"PA": false
};
rolesArr.forEach(function (role) {
rolesObj[role] = true;
});
return rolesObj;
}
$scope.currentUser.rolesObj = rolesObjFromArray(currentUserRoles);
这里有一个JSFiddle to play with,以防它帮助。请注意,JSFiddle正在使用Angular 1.2.1,如果您使用的是更新版本,则需要进行一些调整。
这工作出色!我如何获得传回给用户角色列表的新值?例如。如果我选择'admin',我该如何将这个值添加到'currentUsersRoles'中 – test
您可能需要稍微改变一下数据的结构。不必为每个用户提供一组角色,您可以为每个用户分配一个角色对象,其中包含键的角色名称和值的布尔值。然后你可以在键上重复生成复选框列表,然后将这些值设置为复选框的ngModel。我会把这个添加到我的答案中。 –
您可能需要稍微更改一下数据结构。不必为每个用户提供一组角色,您可以为每个用户分配一个角色对象,其中包含键的角色名称和值的布尔值。然后你可以在键上重复生成复选框列表,然后将这些值设置为复选框的ngModel。我已经更新了我的答案以包含此信息。 –