Clarity + Angular6: прослушиватель узлов дерева просмотра (clr-tree-node) - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь отследить изменения, внесенные в источник данных узлов дерева. Каждый узел имеет свойство 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 голосов
/ 11 ноября 2018

Насколько я понимаю, вы уже связаны с этим событием. Просто используйте длинную форму двухсторонней привязки:

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);
    }
}

Как то так. Конечно, добавляйте типы данных везде, где это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...