清晰度+ Angular6:树视图节点侦听器(clr-tree-node)

时间:2018-11-10 18:46:26

标签: angular angular6 treenode clarity angular-event-emitter

我正在尝试跟踪对树节点数据源所做的更改。 每个节点都有一个 selected 属性,该属性反映了节点选择状态,每当我选择一个节点时,我都需要将该选择发送给另一个组件,该组件将根据该选择构建另一棵树。

我尝试使用OnChanges接口,但是稍后我在文档中读到ngOnChanges仅在再次设置数据时才调用。

这是我的简单模板:

   <clr-tree-node [(clrSelected)]="selected" >
        Asset
        <ng-template [clrIfExpanded]="true">
            <clr-tree-node *ngFor="let asset of assets" [(clrSelected)]="asset.selected">
                {{asset.type}}
            </clr-tree-node>
        </ng-template>
    </clr-tree-node>

是否存在我可以绑定的树节点事件,该事件可用于(通过EventEmitter)发出更改的数据?例如onSelectionChange或onChange或其他? 还是其他机制?

预先感谢, 亚历克斯。

1 个答案:

答案 0 :(得分:2)

据我所知,您已经绑定到该事件。只需使用两种方式绑定的长形式:

template.html

<clr-tree-node [clrSelected]="selected" (clrSelectedChange)="changeSelected($event)">
    Asset
    <ng-template [clrIfExpanded]="true">
        <clr-tree-node 
            *ngFor="let asset of assets 
            [clrSelected]="asset.selected"
            (clrSelectedChange)="changeSelectedAsset(asset, $event)"
        >{{asset.type}}</clr-tree-node>
    </ng-template>
</clr-tree-node>

component.ts

@Component(...)
export class MyComp {
    @Output public structureChange:EventEmitter<...> = new EventEmitter<...>();

    public changeSelected(data):void {
        this.selected = data;
        this.structureChange.emit(data);
    }
    public changeSelectedAsset(asset, data):void {
        asset.selected = data;
        this.structureChange.emit(this.selected);
    }
}

类似这样的事情。当然,请尽可能添加数据类型。