Я использую угловой материал для открытия диалогов. У меня есть много компонентов, которые становятся открытыми в диалогах, но с точки зрения хорошего разделения проблем я хочу избежать запекания поведения диалога в компоненте. У меня есть диалоговое окно панели вызова компонента-оболочки, которое имеет область ng-content и предоставляет некоторые базовые функции и стили.
Я хотел бы иметь возможность сделать что-то подобное, как я мог бы сделать с tsx/react;
const dialogComp = `<app-dashboard-dialog><app-create-user-form (create)="handleCreate()" cancel="handleCancel()"></app-create-user-form></app-dashboard-dialog>`
this.dialog.open(dialogComp, { ... });
Есть ли что-нибудь подобное, что будет работать с mat-dialog? Как избежать создания версии компонента с диалоговым окном, когда мы решили открыть компонент в диалоговом окне?
В настоящее время я создаю новый компонент диалога ex create-user-form-dialog.component.ts, который имеет тот же шаблон, что и моя желаемая переменная dialogComp. и теперь открываем этот новый диалоговый компонент this.dialog.open(CreateUserFormDialog, { ... });
Компонент диалога имеет ссылку на диалог и введенные данные.
@Component({
selector: 'app-create-user-form-dialog',
template: `
<app-dashboard-dialog #dialog>
<app-create-user-form
[detail]="injected_detail"
(create)="createUser($event)"
(cancel)="cancel($event)"
>
</app-create-user-form>
</app-dashboard-dialog>
`,
styleUrls: []
})
export class CreateUserFormDialogComponent {
constructor(
public dialogRef: MatDialogRef<CreateUserFormDialogComponent>,
@Inject(MAT_DIALOG_DATA) public injected_detail: Info
) {}
Таким образом, create-user-form.component.ts выдает результаты своих кнопок (сохранить, отменить и т. д.), а create-user-form-dialog.component.ts выдает обратно через метод dialogref.close. Не уверен, насколько это усложняет ситуацию и можно ли каким-то образом использовать ViewChild.