Javascript 如何访问使用<;投影的任意角度子组件中的方法;ng内容>;?
我正在制作一个带有角度材质的对话框,它将是一个父组件(包含对话框页眉和页脚),然后可以使用Javascript 如何访问使用<;投影的任意角度子组件中的方法;ng内容>;?,javascript,angular,angular-material,Javascript,Angular,Angular Material,我正在制作一个带有角度材质的对话框,它将是一个父组件(包含对话框页眉和页脚),然后可以使用/ng content>投影任意子组件(对话框内容) dialog.component.html: <h1 mat-dialog-title>Title</h1> <mat-dialog-content> <ng-content></ng-content> </mat-dialog-content> <mat-dialog-a
/ng content>
投影任意子组件(对话框内容)
dialog.component.html:
<h1 mat-dialog-title>Title</h1>
<mat-dialog-content>
<ng-content></ng-content>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-icon-button (click)="submit()">
<mat-icon>save</mat-icon>
</button>
</mat-dialog-actions>
标题
拯救
任意对话框content.component.html
<dialog>
<!-- Dialog content here -->
</dialog>
我要做的是从对话框的save()方法调用任意对话框内容的save()方法,因此我需要从父组件获取对任意组件的引用。我尝试过使用@ContentChild,但无法使其工作,因为在运行时之前我不知道哪个组件将成为对话框内容。您可以在对话框组件上使用事件发射器在组件之间通信 将其添加到对话框中。ts:
@Output() onSubmit = new EventEmitter();
submit() {
// do whatever you want
this.onSubmit.next();
}
然后在任意组件html中:
<dialog (onSubmit)="save()">
<!-- Dialog content here -->
</dialog>
其中save()是组件保存函数
共享服务将是一个更全面的解决方案,但这适用于此用例。最全面的解决方案将是使用共享服务。某种类型的save-signal.service,由对话框包装器提供,并注入到对话框及其组件中。基本上,您将为内部组件提供可能位于对话框中的上下文。啊,谢谢,我应该在哪里提供此服务,以便在每次打开和关闭对话框时创建和销毁它?到目前为止,我只有始终可用的单例服务。由对话框包装器提供。如果内部组件可能不在对话框中,则将注入设置为可选,如果服务未连接,则仅订阅save信号。实际上,我在这里收回了我的语句。有一个更简单的方法,考虑到你是如何构建的,在回答谢谢中补充道。我决定按照您的建议使用共享服务,但由于试图在对话组件中提供它而被绊倒。事实上,我必须在任意对话框内容组件中提供它(通过对话框组件中的转置)以使其工作。