如何从组件循环向主父角5发射事件

时间:2018-05-24 14:03:56

标签: javascript angular typescript components angular2-directives

我写了下面的代码,我在这里循环组件来显示孩子

parent.component.ts

 tree = [
    {
      id: 1,
      name: 'test 1'
    }, {
      id: 2,
      name: 'test 2',
      children: [
        {
           id: 3,
           name: 'test 3'
        }
      ]
    }
 ]

nodeClicked(event) {
    console.log(event);
}

parent.component.html

<app-child [tree]="tree" (nodeEmitter)="nodeClicked($event)"></app-child>

child.component.ts

@Input() tree;
@Output() nodeEmitter = new EventEmitter();

clickToEmit() {
    this.nodeEmitter.emit(1);
}

child.component.html

<ul>
  <li *ngFor="let node of tree">{{ node.name }}</li>
  <button (click)="clickToEmit()">Click Me!!!</button>
  <app-child [tree]="node.children" (nodeEmitter)="nodeClicked($event)"></app-child>
</ul>

在这里,我的问题是

  • 我可以在 parent.component.html

  • 中获取发出的事件
  • 我无法将 child.component.html 发出的事件发送到
    parent.component.html

我收到错误,因为 child.component.ts

中没有定义 nodeClicked

我在这里做错了什么?我在这个问题上浪费了这么多时间。

感谢您的帮助......: - )

1 个答案:

答案 0 :(得分:3)

在子组件中,您需要继续将事件链接到父组件。修改模板,以便在子事件发生时重新发出发射器。

<ul>
  <li *ngFor="let node of tree">{{ node.name }}</li>
  <button (click)="clickToEmit()">Click Me!!!</button>
  <app-child [tree]="node.children" (nodeEmitter)="nodeEmitter.emit($event)"></app-child>
</ul>