使用没有 MatDialog 的组件,MatDialogRef<SomeComponent>

Val*_*cia 2 typescript angular-material angular-material2 angular

我有一个函数可以打开一个带有名为“NoteFormComponent”的组件的 MatDialog,它看起来像这样

  openForm() {
    let dialogConfig = new MatDialogConfig();
    dialogConfig.autoFocus = true;
    dialogConfig.width = "95%";
    dialogConfig.panelClass = "form-dialog";
    dialogConfig.scrollStrategy = new NoopScrollStrategy();

    this.dialog.open(NoteFormComponent, dialogConfig).beforeClose().subscribe(() => this.getNotes());
  }
Run Code Online (Sandbox Code Playgroud)

我弹出一个包含“NoteFormComponent”的模式。 那么问题是什么?

问题是我想在没有 MatDialog 的情况下使用“NoteFormComponent”,但是为了将它与 MatDialog 一起使用,我必须像这样在组件的构造函数中注入一个引用

  constructor(
    private noteService : NoteService, 
    private productService : ProductService,
    private categoryService : CategoryService,
    private clientService : ClientService,
    private notification : NotificationService,
    private dialogRef : MatDialogRef<NoteFormComponent>, /*This Reference*/
    private loader : LoaderService,
    private sessionService : SessionService,
    private securityBlockerService : SecurityBlockerService,
    private dialog : MatDialog,
    private dialogService : DialogService
  ) { }
Run Code Online (Sandbox Code Playgroud)

如果我尝试将组件与模板选择器 '' 一起使用,它会抛出一个错误,即没有 MatDialogRef 的提供者,我唯一想到的是创建一个 'NoteFormComponent' 的副本,但没有 MatDialogRef 注入器构造函数。

有没有办法解决或解决这个问题?

Eim*_*man 6

@Optional()在构造函数(参考)中注入 MatDialogRef 时使用装饰器:

constructor(
    ...
    @Optional() private dialogRef: MatDialogRef<NoteFormComponent>,
    ...
) { ... }
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以NoteFormComponent以正常方式使用 ,而无需使用 MatDialog。