我有一棵树,上面有复选框(let's use Material's example here)。我希望开始检查水果节点。如何检查这些节点?
我看到SelectionModel有一个select()方法,示例中传递了一个节点。但在本例中,构成树的数据是一个TodoItemNode数组,但SelectionModel包含TodoItemFlatNode。示例中的transformer方法可以“展平”我的节点(即。将TodoItemNode转换为TodoItemFlatNode),但这将返回一个新实例。
如何以编程方式选中mat-tree复选框以匹配我的数据?
发布于 2018-11-30 02:49:05
要预先选择fruits节点,请在附带的stackblitz示例中的TreeChecklistExample类的ngAfterViewInit中实现以下内容。
这将循环遍历treeControl
item == 'Fruits'
dataNodes,如果展开节点,则展开
item == 'Groceries',因为它是水果的父节点。ngAfterViewInit() { for (设i= 0;i< this.treeControl.dataNodes.length;i++) { if (this.treeControl.dataNodesi.item == 'Fruits') {forthis.treeControl.expand(this.treeControl.dataNodesi) } if (this.treeControl.dataNodesi.item == 'Groceries') { this.treeControl.expand(this.treeControl.dataNodesi) }
Stackblitz
https://stackblitz.com/edit/angular-j2nf2r?embed=1&file=app/tree-checklist-example.html
发布于 2022-01-07 11:24:30
对于dataNodes未定义的NestedTreeControl,您可以只遍历数据源。这可以使用递归函数来完成,这里通过在用于填充树的TreeItem类上的id属性来查找它来演示。当然,您的查找方法可以根据您拥有的类的不同而有所不同。
一旦在DataSource数据中找到正确的节点,就可以创建一个包含找到的对象的数组并返回它。然后,递归的前几级可以将它们自己级别的found项添加到末尾,因此最终结果是一个包含整个序列的数组,该序列以相反的顺序展开,索引0是最深的节点。
expandTreeToNode(nodeId: number) {
let selectNode: TreeItem[] | null = this.findTreeNode(this.nestedDataSource.data, nodeId);
if (selectNode != null && selectNode.length > 0) {
// expand the returned tree, from shallowest to deepest level
for (let i : number = selectNode.length - 1; i >= 0; --i)
this.nestedTreeControl.expand(selectNode[i]);
// function to make stuff happen when you click on a node.
this.setSelectedNode(selectNode[0]);
}
}
findTreeNode(collection: TreeItem[], nodeId: number) : TreeItem[] | null
{
for (let i = 0; i < collection.length; ++i)
{
let item : TreeItem = collection[i];
if (item.id == nodeId)
return new Array(item);
let chItem : TreeItem[] | null = this.findTreeNode(item.children, nodeId);
if (chItem != null) {
chItem[chItem.length] = item;
return chItem;
}
}
return null;
}https://stackoverflow.com/questions/53545096
复制相似问题