Angular 是否可以覆盖@Component.providers中的默认对话框选项?

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

我想创建一个没有背景的共享对话框(默认情况下)。我已在该对话框的@Component decorator中覆盖MatDialogConfig注入令牌,如下所示:

@组件({
...
提供程序:[{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}
。我不想指定对话框选项。