[英]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
})
}
}
如果您不将服务提供到根目录中,那么您必须在
将其提供到功能中意味着每次创建该功能时,都会获得该服务的一个实例。
如果您在模块中提供它,则意味着每次创建模块时,都会创建该服务的一个实例,这对于该模块中的每个功能都是通用的。
如果您希望将模块实例提供给您的对话框组件,您可以。 如果您选择提供的功能,那么您将在对话组件中拥有该服务的新实例(这对于从“父”组件中保留 state 将毫无用处)。
我希望它回答了这个问题,如果没有,请随时要求更多解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.