如何使用SelectionModel以编程方式选择“材料树”节点?

ada*_*ort 5 angular-material angular

我有一棵带有复选框的树(让我们在这里使用Material的示例)。我希望开始检查水果节点。如何检查这些节点?

我看到SelectionModel有一个select()方法可以使示例传递节点。但是在该示例中,构成树的数据是的数组TodoItemNode,但SelectionModel包含了TodoItemFlatNode。该transformer示例中的方法可以“拉平”我的节点(即转换TodoItemNodeTodoItemFlatNode),但这将返回一个新实例。

如何以编程方式选择Mat-tree复选框以匹配我的数据?

Mar*_*hal 6

要预先选择水果节点,请在附加的stackblitz示例中ngAfterViewInitTreeChecklistExample类中实现的以下操作。

  • 通过这种将循环dataNodestreeControl
  • 如果item == 'Fruits'选择节点并展开
  • 同样,如果item == 'Groceries'扩展节点是Fruits的父节点。

    ngAfterViewInit() {
        for (let i = 0; i < this.treeControl.dataNodes.length; i++) {
          if (this.treeControl.dataNodes[i].item == 'Fruits') {
            this.todoItemSelectionToggle(this.treeControl.dataNodes[i]);
            this.treeControl.expand(this.treeControl.dataNodes[i])
          }
          if (this.treeControl.dataNodes[i].item == 'Groceries') {
            this.treeControl.expand(this.treeControl.dataNodes[i])
          }
        }
      }
    
    Run Code Online (Sandbox Code Playgroud)

Stackblitz

https://stackblitz.com/edit/angular-j2nf2r?embed=1&file=app/tree-checklist-example.html


  • NestedTreeControl具有未定义的dataNodes,这使得答案不可能。[此github评论](https://github.com/angular/material2/issues/12469#issuecomment-410441658)关于一个相关问题,建议您手动进行设置,直到解决为止。 (4认同)
  • 非常感谢!我试图使用`this.dataSource.data`而不是dataNodes,这是行不通的。 (2认同)