Angular 避免在视图中创建对话框包装器组件

Angular 避免在视图中创建对话框包装器组件,angular,viewchild,mat-dialog,Angular,Viewchild,Mat Dialog,我正在使用有角度的材质打开对话框。我有很多在对话框中打开的组件,但作为一个良好的关注点分离问题,我希望避免在对话框中烘焙组件的行为。 我有一个包装器组件调用仪表板对话框,它有一个ng内容区域,并提供一些基本功能和样式 我希望能够像使用tsx/react一样做这样的事情 const dialogComp = `<app-dashboard-dialog><app-create-user-form (create)="handleCreate()" cancel="handleCa

我正在使用有角度的材质打开对话框。我有很多在对话框中打开的组件,但作为一个良好的关注点分离问题,我希望避免在对话框中烘焙组件的行为。 我有一个包装器组件调用仪表板对话框,它有一个ng内容区域,并提供一些基本功能和样式

我希望能够像使用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, { ... });
const dialogComp=``
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
    ) {}
@组件({
选择器:“应用程序创建用户表单对话框”,
模板:`
`,
样式URL:[]
})
导出类CreateUserFormDialogComponent{
建造师(
公共dialogRef:MatDialogRef,
@注入(材料对话框数据)公共注入详细信息:信息
) {}
因此,create-user-form.component.ts会输出其按钮(保存、取消等)的结果,create-user-form-dialog.component.ts会通过dialogref.close方法返回结果。不确定这会如何使情况复杂化,以及ViewChild是否仍可以以某种方式使用。

我已经介绍了一个注入组件(表单)的基本示例进入“可重用材料”对话框,该对话框将用户输入传递回启动该对话框的父组件

这里是一个正在运行的演示

  • 对话框包装器
    是可重用的对话框组件
  • 对话框表单
    是将组件注入到
    对话框包装器
    中的一个示例,其中包含数据输入/输出所需的服务
  • name
    (Alice)是从父组件传递到
    对话框表单的数据示例
  • 对话框FormResponseService
    在提交表单时使用
    名称和formControl
    faveFood
    中的值更新主题
  • 父组件在打开
    对话框包装器时订阅此服务,并在收到响应时关闭对话框

其本身相当简单;大多数繁重的工作都在和中,但实际上,这只是向正在注入到对话框中的组件添加两个服务的情况,以处理与父级的通信。

可能是您正在寻找的。我最近为一个项目做了类似的事情。您必须注入您需要的组件nt显示在对话框中,然后设置一个服务,将响应转发回启动对话框的组件,因为您不能使用输入或输出。最初这需要很大的努力,但这是可能的,并且您最终只需要一个对话框组件。我将看看我是否可以做一个示例…下面的@Ken有什么好运气吗?