【问题标题】:use component without MatDialog, MatDialogRef<SomeComponent>使用没有 MatDialog、MatDialogRef<SomeComponent> 的组件
【发布时间】:2019-05-02 06:02:03
【问题描述】:

我有一个函数可以打开一个带有名为“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 注入器。

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

【问题讨论】:

    标签: angular typescript angular-material angular-material2


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!这正是我所需要的
    • 你是否认为 Angular 需要一个类似的功能:而不是使用 @Optional() private dialogRef: &lt;..&gt;,而是使用 private dialogRef?: &lt;..&gt; 来实现相同的行为?
    • 更简洁的输入方式:@Optional() private dialogRef: MatDialogRef&lt;NoteFormComponent&gt; | null.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2019-09-25
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多