javascript - 如何在 Angular 2 中展开/折叠递归 TreeView ?

标签 javascript angularjs angular typescript tree

我正在尝试从这个 AngularJS 1 demo 重现展开/折叠功能进入我的 Angular 2 应用程序(我使用的是递归 View ),但我的尝试总是导致扩展超过 1 个节点。

如何在 Angular 2 中实现适当的展开/折叠功能?

这是我当前的代码:

import {Component, Input} from '@angular/core';

@Component ({
    selector: 'tree-view',
    template: `
    <ul>
        <li *ngFor="let node of treeData">
            <span *ngIf="node.children?.length" (click)="toggleChildren()">[+]</span>
            {{node.name}}
            <tree-view [treeData]="node.children"></tree-view>
        </li>
    </ul>
    `
})
export class TreeView {
    @Input() treeData: any[];

    toggleChildren() {
      // to do
    }
}

这是一个包含所有内容的 Plunker:http://plnkr.co/edit/KmLDb1ba3WYp3X6snnmg?p=preview

最佳答案

向节点添加属性以检查它们是否可见。如果是,则显示它们,如果不是,则隐藏它们。

这是一个关于如何实现它的简单示例。当节点可见时,您可能希望通过将图标 [+] 更改为 [-] 来改进它。

import {Component, Input} from '@angular/core';

@Component ({
    selector: 'tree-view',
    template: `
    <ul>
        <li *ngFor="let node of treeData">
            <span *ngIf="node.children?.length" (click)="toggleChildren(node)">[+]</span>
            {{node.name}}
            <tree-view [treeData]="node.children" *ngIf="node.visible"></tree-view>
        </li>
    </ul>
    `
})
export class TreeView {
    @Input() treeData: any[];


    toggleChildren(node: any) {
      // to do
      node.visible = !node.visible;

    }
}

关于javascript - 如何在 Angular 2 中展开/折叠递归 TreeView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493695/

相关文章:

javascript - {显示 :none} not working with checkbox?

angularjs - NG-REPEAT音频源按类别选择

javascript - 使用 Angular2 根据选择框值显示或隐藏内容 div

css - Angular 1.3.3 - ngAnimate 1.3.3 不添加类

angular - NgZone/Angular2/Ionic2 类型错误 : Cannot read property 'run' of undefined

html - 如何使用一个变量在 Angular 模态中显示和隐藏两个 div

javascript - jquery-ias 问题 - 未加载页脚

java - 使用 jax-rs 使用 jquery 下载 pdf

javascript - Ajax 多重上传

AngularJS 从指令获取 $event