Angular 避免在视图中创建对话框包装器组件
我正在使用有角度的材质打开对话框。我有很多在对话框中打开的组件,但作为一个良好的关注点分离问题,我希望避免在对话框中烘焙组件的行为。 我有一个包装器组件调用仪表板对话框,它有一个ng内容区域,并提供一些基本功能和样式 我希望能够像使用tsx/react一样做这样的事情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
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是否仍可以以某种方式使用。我已经介绍了一个注入组件(表单)的基本示例进入“可重用材料”对话框,该对话框将用户输入传递回启动该对话框的父组件
这里是一个正在运行的演示
是可重用的对话框组件对话框包装器
是将组件注入到对话框表单
中的一个示例,其中包含数据输入/输出所需的服务对话框包装器
(Alice)是从父组件传递到name
对话框表单的数据示例
在提交表单时使用对话框FormResponseService
名称和formControl
中的值更新主题faveFood
- 父组件在打开
对话框包装器时订阅此服务,并在收到响应时关闭对话框
其本身相当简单;大多数繁重的工作都在和中,但实际上,这只是向正在注入到对话框中的组件添加两个服务的情况,以处理与父级的通信。可能是您正在寻找的。我最近为一个项目做了类似的事情。您必须注入您需要的组件nt显示在对话框中,然后设置一个服务,将响应转发回启动对话框的组件,因为您不能使用输入或输出。最初这需要很大的努力,但这是可能的,并且您最终只需要一个对话框组件。我将看看我是否可以做一个示例…下面的@Ken有什么好运气吗?