#angular #angular-material2
#angular #angular-material2
Вопрос:
Я пытаюсь получить начальное проверяемое значение в компоненте mat-tree, как это описано в следующем стекблите:https://stackblitz.com/edit/material-tree-checklist-1cqqha
У меня будет только два уровня узлов. Таким образом, я попытался переключить узел, если он проверен следующим образом:
update(value){
this.treeData = value;
this.dataSource.data = this.treeData;
for(let itemG of this.treeData) {
for(let item of itemG.value) {
if(item.checked) {
this.checklistSelection.toggle(item);
this.checklistSelection.select(item);
}
}
}
}
Однако это не помогло.
Кто-нибудь может мне здесь помочь?
Огромная благодарность!
Спасибо!
Ответ №1:
После копания и отладки я выяснил, что рабочий код:
update(value){
this.treeData = value;
this.dataSource.data = this.treeData;
for(let itemG of this.treeData) {
for(let item of itemG.children.value) {
if(item.checked) {
this.checklistSelection.toggle(item);
}
}
}
}
и все работает так, как ожидалось 🙂
Кто-нибудь может предложить лучшее решение?
Комментарии:
1. не могли бы вы, пожалуйста, опубликовать рабочий / обновленный stackblitz?
Ответ №2:
У вас уже должна быть подписка на изменение данных в ngOnInit. Добавьте метод checkAll (и вызывайте после источника данных.данные будут изменены), и это должно пометить все элементы как выбранные.
ngOnInit(): void {
... // removed the rest of the code for brevity
this._database.dataChange.subscribe(data => {
this.dataSource.data = data;
this.checkAll(); // this is added
});
}
checkAll(): void {
for(let item of this.treeControl.dataNodes) {
this.checklistSelection.select(item);
}
}