你能订阅Angular中嵌入式视图的事件吗?

时间:2017-12-04 18:03:12

标签: angular eventemitter

我正在尝试使用EventEmitters通过一系列嵌套组件传递数据/事件。但是,我认为我解决一个问题的方法可能是防止这种情况发生。

我正在其中一个组件上创建一个嵌入式视图,因此它不会弄乱表结构。所以对于该组件,这里有一些相关的代码:

@ContentChild(DataTableAddRecordComponent) adder: DataTableAddRecordComponent;
@ViewChild('dtAdder', { read: ViewContainerRef }) adderContainer: ViewContainerRef;

ngAfterContentInit(): void {
    if (this.adder && this.adderContainer) {
      this.adderContainer.createEmbeddedView(this.adder.templateRef);
    }

  }

以下是同一组件的一些HTML。请注意我尝试订阅事件的方式是ng-container而不是实际组件。再次这样,我不会让<data-table-adder>标签搞砸我的桌子。但是,当它不在我的模板中时,我怎么能从该组件中捕获事件(或者我还缺少其他东西)?

<table>
<tbody>
<tr><td>Some Junk</td></tr>
<ng-container #dtAdder (added)="onAdd($event)"></ng-container>
</tbody>
</table>

1 个答案:

答案 0 :(得分:0)

事实证明这很容易......你有对组件的引用,你可以以编程方式订阅发出的事件。

if (this.adder && this.adderContainer) {
  this.adderContainer.createEmbeddedView(this.adder.templateRef);
  this.adder.added.subscribe(data => 
    this.add.emit(data));
}
相关问题