Angular — Начальные проверяемые значения для списка проверяемых материалов

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