繁体   English   中英

在 MatDialog 中提供额外的提供者

[英]Provide additional provider in MatDialog

想象一下,您有没有提供的 Angular 服务,因此它仅在某些组件及其子组件中可用。 现在这样一个组件打开了 MatDialog —— 是否可以在那里注入该服务?

正如我在默认情况下看到的那样,Angular 不会将 MatDialog 组件视为调用者组件的子组件,而且我也看不到任何设置来更改它。

这里的 PS 服务是有状态的,所以只要把它放到 MyDialogComponent 的提供者那里就会创建新的服务,这是不希望的。

您所要做的就是为 dialog.open 方法提供 ViewContainerRef 所需的服务实例所在的位置。 'VERY_IMPORTANT_SERVICE' 将可用于在 'SomeComponent' 中注入。 请参阅下面的代码

@Component({
    selector: 'cmp',
    providers: [ VERY_IMPORTANT_SERVICE ]
})
export class Component {
    constructor(private dialog: MatDialog, private viewContainerRef: ViewContainerRef) {}

    openDialog() {
       this.dialog.open(SomeComponent, {
           viewContainerRef: this.viewContainerRef
       })
    }
}

如果您不将服务提供到根目录中,那么您必须在

  • Angular 功能(组件、指令...)
  • 一个Angular模块

将其提供到功能中意味着每次创建该功能时,都会获得该服务的一个实例。

如果您在模块中提供它,则意味着每次创建模块时,都会创建该服务的一个实例,这对于该模块中的每个功能都是通用的。

如果您希望将模块实例提供给您的对话框组件,您可以。 如果您选择提供的功能,那么您将在对话组件中拥有该服务的新实例(这对于从“父”组件中保留 state 将毫无用处)。

我希望它回答了这个问题,如果没有,请随时要求更多解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM