您可以在 Angular 的嵌入式视图中订阅事件吗?

Can you subscribe to events on an embedded view in Angular?

我正在尝试使用 EventEmitter 向上传递 data/events 通过嵌套组件链。但是我认为我解决一个问题的方法可能会阻止这种情况的发生。

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

@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。但是,当它不在我的模板中时(或者我缺少其他东西),我如何从该组件捕获事件?

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

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

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