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