我正在使用角度材料打开对话框。我有很多组件在对话框中变得开放,但是为了很好地分离关注点,我想避免将对话框行为烘焙到组件中。我有一个名为dashboard-dialog 的包装器组件,它有一个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 一起使用?当我们决定在对话框中打开组件时,如何避免制作组件的对话框包装版本?
目前我正在创建一个新的对话框组件,例如 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 是否仍然可以以某种方式使用。