繁体   English   中英

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

[英]use component without MatDialog, MatDialogRef<SomeComponent>

我有一个函数,用一个名为'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());
  }

我弹出一个包含“ 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注入器构造函数。

是否有解决或解决此问题的方法?

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

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

通过这样做,你可以消耗NoteFormComponent以正常的方式,不使用MatDialog。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM