AngularJS需要在不使用ng-model的情况下将父复选框与子项绑定

时间:2017-05-09 12:46:45

标签: angularjs checkbox parent-child angular-ngmodel angularjs-ng-checked

我通过ng-repeat电话使用API获得了一个用户列表。 对于每个用户,他们是5个类别,每个类别在true/false上获得2-3个授权。

对于每个user/category/authorization,我想要一个可以更改授权值的复选框。

当我选中用户的复选框时,我想要他的所有5个类别+所有授权都已经检查true,如果我取消选中一个授权或用户类别,则他的复选框将显示false。< / p>

因此,如果我重述一下:有parent(User)child(Category)和盛大child(Authorization)

我看到我们可以将ng-modelng-checked一起使用,但在我的复选框中,ng-model用于boolean authorization (ng-model="authorization.Enabled"),对于超过1个孩子,这不再是工作

我该如何处理这个案子?需要$watcher

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以对每个孩子/大孩子使用ng-click。 在其中传递父对象(用户或导管)对象并在特定条件下修改其布尔值(当所有子对象都为真时) 你不应该同时使用ng-click和ng-model,你可以通过使用ng-checked和ng-click on parent(user或cathegory)复选框来避免这样做。

vm.authorizationCheckboxClick = function (user,category, authorization) {
authorization.booleanValue = !authorization.booleanValue;
if (authorization.booleanValue){
    category.booleanValue = true;
    category.authorizations.forEach(function(element) {
      if(!element.booleanValue){
        category.booleanValue = false;
        break;
      }
    }, this);
}
else {
  category.booleanValue = false;
}

if (category.booleanValue){
    user.booleanValue = true;
    user.categories.forEach(function(element) {
      if(!element.booleanValue){
        user.booleanValue = false;
        break;
      }
    }, this);
}
else {
  user.booleanValue = false;
}
}

此示例函数更改授权值,然后更改父类别和用户的bolean值。您可以将此值绑定到ng-checked指令