您可以在 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));
}
我正在尝试使用 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));
}