Angular 是否可以覆盖@Component.providers中的默认对话框选项?
我想创建一个没有背景的共享对话框(默认情况下)。我已在该对话框的@Component decorator中覆盖MatDialogConfig注入令牌,如下所示:Angular 是否可以覆盖@Component.providers中的默认对话框选项?,angular,angular-material,dialog,Angular,Angular Material,Dialog,我想创建一个没有背景的共享对话框(默认情况下)。我已在该对话框的@Component decorator中覆盖MatDialogConfig注入令牌,如下所示: @组件({ ... 提供程序:[{provide:MAT\u DIALOG\u DEFAULT\u选项,useValue:{hasBackground:false}}] }) 类对话框组件{} 但是,它不起作用:。我不想在模块声明中这样做,因为它将应用于这个模块中的所有对话框,这不是我想要的 我也不想每次使用它时都写{hascardb
@组件({
...
提供程序:[{provide:MAT\u DIALOG\u DEFAULT\u选项,useValue:{hasBackground:false}}]
})
类对话框组件{}
但是,它不起作用:。我不想在模块声明中这样做,因为它将应用于这个模块中的所有对话框,这不是我想要的
我也不想每次使用它时都写{hascardback:false}
是否可以仅对此对话框执行此操作,或者我必须以同样的方式指定此注入令牌模块?如果您希望仅在不同组件的某些对话框中使用默认选项,我建议将常量声明为
export const DEFAULT_DIALOG_OPTIONS = { hasBackdrop: false };
然后,无论何时调用open方法,都可以使用spread操作符覆盖传递给它的选项
this._dialog.open(MyDialogComponent, { ...dialogOptions, ...DEFAULT_DIALOG_OPTIONS });
更新2
如果您不需要每次都指定对话框选项,并且仍然希望每次打开MyDialogComponent时都传递一个全局选项,那么我建议您创建一个可注入的服务
@Injectabl()
class MyDialogServic {
constructor(dialog: MatDialog) {}
methodToOpenDialog() {
this.dialog.open(MyDialogComponent, { hasBackDrop: false })
}
}
现在,您可以将此服务注入任何组件,并在可能注入此服务的任何其他组件中调用其
methodtopendialog
。这相当于每次使用此对话框时编写{hascardback:false}
。我不想指定对话框选项。