首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SelectionModel以编程方式选择物料树节点?

如何使用SelectionModel以编程方式选择物料树节点?
EN

Stack Overflow用户
提问于 2018-11-30 02:06:23
回答 2查看 13.2K关注 0票数 10

我有一棵树,上面有复选框(let's use Material's example here)。我希望开始检查水果节点。如何检查这些节点?

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-30 02:49:05

要预先选择fruits节点,请在附带的stackblitz示例中的TreeChecklistExample类的ngAfterViewInit中实现以下内容。

这将循环遍历treeControl

  • If 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

票数 18
EN

Stack Overflow用户

发布于 2022-01-07 11:24:30

对于dataNodes未定义的NestedTreeControl,您可以只遍历数据源。这可以使用递归函数来完成,这里通过在用于填充树的TreeItem类上的id属性来查找它来演示。当然,您的查找方法可以根据您拥有的类的不同而有所不同。

一旦在DataSource数据中找到正确的节点,就可以创建一个包含找到的对象的数组并返回它。然后,递归的前几级可以将它们自己级别的found项添加到末尾,因此最终结果是一个包含整个序列的数组,该序列以相反的顺序展开,索引0是最深的节点。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53545096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档