AngularJS Необходимо связать родительский флажок с дочерним без использования ng-модели

Я получил список пользователей, используя ng-repeat через API вызов. Для каждого пользователя их 5 категорий, и каждая категория получила 2-3 авторизации на true/false,

Для каждого user/category/authorization Я хочу флажок, который изменит значение авторизации.

Когда я проверяю флажок Пользователя, я хочу, чтобы все его 5 категорий + все авторизации были проверены true и если я сниму галочку с одной авторизации или категории пользователя, его флажок будет установлен false,

Итак, если я резюмирую: есть parent(User), child(Category) и великий child(Authorization),

Я видел, что мы можем использовать ng-model с ng-checked но в моем флажке ng-model используется для boolean authorization (ng-model="authorization.Enabled") и для более чем 1 ребенка это не больше работы.

Как я могу справиться с этим делом? Нужен $watcher?

Спасибо за вашу помощь!

1 ответ

Вы можете использовать ng-click для каждого ребенка / великого ребенка. Передайте в него родительский объект (user или cathegory) и измените его логическое значение на конкретное условие (когда все дочерние элементы имеют значение true или нет). Вы не должны использовать ng-click и ng-model вместе, вы можете избежать этого, используя ng -checked и ng-click на родительском (пользователь или категория) флажок.

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

В этом примере функция изменяет значение полномочий, а затем изменяет логические значения родительской категории и пользователя. Вы можете привязать эти значения к директиве ng-checked

Другие вопросы по тегам