использовать компонент без MatDialog, MatDialogRef <SomeComponent> - PullRequest
1 голос
/ 01 мая 2019

У меня есть функция, которая открывает 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. Так в чем же проблема?

Проблема в том, что я хочу использовать 'NoteFormComponent' без MatDialog , но для того, чтобы использовать его с 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 Ответ

2 голосов
/ 02 мая 2019

Используйте декоратор @Optional() при добавлении MatDialogRef в конструктор ( Ссылка ):

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

Делая это, вы можете потреблять NoteFormComponent обычным способом, без использования MatDialog.

...