Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问使用<;投影的任意角度子组件中的方法;ng内容>;?_Javascript_Angular_Angular Material - Fatal编程技术网

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信号。实际上,我在这里收回了我的语句。有一个更简单的方法,考虑到你是如何构建的,在回答谢谢中补充道。我决定按照您的建议使用共享服务,但由于试图在对话组件中提供它而被绊倒。事实上,我必须在任意对话框内容组件中提供它(通过对话框组件中的转置)以使其工作。