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

时间:2019-05-01 20:17:09

标签: angular typescript angular-material angular-material2

我有一个函数可以打开MatDialog并带有一个名为'NoteFormComponent'的组件

  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());
  }

我弹出一个包含“ 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
  ) { }

如果我尝试将组件与模板选择器''一起使用,则会引发错误,提示没有提供MatDialogRef的提供程序,我唯一想到的就是创建该组件的副本。 'NoteFormComponent',但构造函数中没有MatDialogRef注入器。

反正有解决或解决此问题的方法吗?

1 个答案:

答案 0 :(得分:2)

在构造器(Reference)中注入MatDialogRef时,请使用@Optional()装饰器:

constructor(
    ...
    @Optional() private dialogRef: MatDialogRef<NoteFormComponent>,
    ...
) { ... }

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