首页 文章

清晰度设计树视图递归问题

提问于
浏览
4

我已经开始使用Clarity Design Angular项目,并且遇到了0.10.0-alpha中提供的Tree View递归模板的问题 .

https://plnkr.co/edit/KK8rVH1xUGCO7VetgomA?p=preview

selectableRoot = {
    "@name": "A1",
    "selected": false,
    "expanded": true,
    "children": [
        {
            "@name": "B1",
            "selected": false,
            "children": [
                { "@name": "C1" },
                { "@name": "C2" },
                { "@name": "C3" }
            ]
        },
        {
            "@name": "B2",
            "selected": true,
            "expanded": true,
            "children": [
                { "@name": "D1" },
                {
                    "@name": "D2",
                    "selected": false
                },
                { "@name": "D3" }
            ]
        },
        {
            "@name": "B3",
            "selected": true,
            "children": [
                { "@name": "E1" },
                { "@name": "E2" },
                { 
                  "@name": "E3",
                  "children":
                     { "@name": "F1" }
                }
            ]
        }
    ]
};

当递归检查命中一个不包含数组的匹配(但只是一个对象 - 请参阅A1> B3> E3> F1)时,它无法呈现该项并导致任何可折叠部分在单击插入符号时复制子项的错误 .

如果只有一个实例,如果发送JSON的API不将子项放入数组中,则不确定如何解决此问题 . 递归应该考虑只存在一个子节点(并且不在数组中)的实例 .

2 回答

  • 4

    我能够从Raja Modamed的输入中解决它,并在递归位上再添加一个检查以防止它在没有数组的情况下访问子节点(这可以防止ngFor错误并将功能返回到切换) .

    https://plnkr.co/edit/OAujF19FPDqaEWvFfgN1?p=preview

    @Component({
    selector: "recursive-selectable-structure",
    template: `
        <clr-tree-node [(clrSelected)]="item.selected">
            {{item.name}}
            <span *ngIf="item.children?.length > 0">
              <ng-template 
                [clrIfExpanded]="item.expanded" 
                *ngFor="let child of item.children">
                  <recursive-selectable-structure
                      [item]="child">
                  </recursive-selectable-structure>
              </ng-template>
            </span>
            <ng-template *ngIf="item && item.children && !item.children[0]" [clrIfExpanded]="item.children.expanded">
              <recursive-selectable-structure [item]="item.children">
              </recursive-selectable-structure>
            </ng-template>
        </clr-tree-node>
    `
    

    })

  • 1

    在https://plnkr.co/edit/KK8rVH1xUGCO7VetgomA?p=preview中添加另一个对象案例的条件递归替换“recursive-selectable-structure”组件中的此代码

    @Component({
    selector: "recursive-selectable-structure",
    template: `
        <clr-tree-node [(clrSelected)]="item.selected">
            {{item.name}}
            <recursive-selectable-structure *ngIf="item && item.children && !item.children[0]" [item]="item.children">
    
            </recursive-selectable-structure>
            <ng-template 
              [clrIfExpanded]="item.expanded" 
              *ngFor="let child of item.children">
                <recursive-selectable-structure
                    [item]="child">
                </recursive-selectable-structure>
            </ng-template>
        </clr-tree-node>
    `
    

    })

    Replace and Try this case in same plunker

相关问题