【问题标题】:Angular6: Mat-tree-node selection/click event implementationAngular6:Mat-tree-node 选择/点击事件实现
【发布时间】:2018-11-26 20:57:20
【问题描述】:

我正在使用带有动态数据的 Angular 材质树控件。

这里是完整示例的链接:

example is here

它的工作原理如示例中所述。现在我想启用每个节点单击事件并在我的打字稿函数中发送(角度表达式)绑定数据。

谁能指导我?

我尝试了不同的代码,但树节点无法点击。

见html:

    <mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
  <mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
    <button mat-icon-button disabled ></button>
    {{node.item}}
  </mat-tree-node>
  <mat-tree-node *matTreeNodeDef="let node; when: hasChild" matTreeNodePadding>
    <button mat-icon-button  (click)="applyFilter($event)"
            [attr.aria-label]="'toggle ' + node.filename" matTreeNodeToggle>
      <mat-icon class="mat-icon-rtl-mirror">
        {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
      </mat-icon>
    </button>
    {{node.item}}
    <mat-progress-bar *ngIf="node.isLoading"
                      mode="indeterminate"
                      class="example-tree-progress-bar"></mat-progress-bar>
  </mat-tree-node>
</mat-tree>

我尝试了这个来源,但仍然无法修复它。我尝试了堆栈溢出解决方案,但它还不能解决我的问题。

 ngAfterViewChecked() {
    this.treeNodes.forEach((reference) => {
      if (!this.hasListener.includes(reference.nativeElement)) {
        console.log('* tick');

        this.renderer.listen(reference.nativeElement, 'click', () => {
          this.updateHighlight(reference);
        });
        this.renderer.listen(reference.nativeElement.children.item(0), 'click', () => {
          this.updateHighlight(reference);
        });

        this.hasListener = this.hasListener.concat([reference.nativeElement]);
      }
    });

    this.hasListener = this.hasListener.filter((element) => document.contains(element));
    console.log('*', this.hasListener.length);
  }

【问题讨论】:

    标签: angular typescript angular-material


    【解决方案1】:

    您可以将您的{{node.item}} 包装在一个垫子按钮中并从那里绑定到单击事件以将节点元素传递给您的组件方法。

    <mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding>
        <button mat-button (click)="logNode(node)">
          {{node.item}}
        </button>
    </mat-tree-node>
    

    然后在你的组件中

     logNode(node){
        console.log(node)
      }
    

    【讨论】:

    • 谢谢。当我删除第一个树节点时它正在工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2019-04-14
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多