You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将表单输入值传递给mat-dialog弹窗按钮?

问题分析与修复方案

1. 修复Dialog打开时的Data参数格式错误

你打开Dialog时的data参数传递格式有误,当前传入了两个独立对象,需合并为单个对象:

openDialogSerialLot(index: number){
  // 修正data参数为包含两个字段的单个对象
  let dialogRef = this.dialog.open(AddSerialLotComponent, {
    data: { Name: '', Address: '' }
  })
  
  dialogRef.afterClosed().subscribe(result => {
    console.log(result)
  })
}

2. 弹窗组件中正确初始化表单字段值

弹窗组件内,你将整个data对象直接赋值给了两个表单字段,需分别提取data中的对应属性赋值:

constructor(@Inject(MAT_DIALOG_DATA) public data:any,private fb:FormBuilder) { }

ngOnInit(): void {
  this.Form= this.fb.group({
    Name: [''],
    Address: [''],
  })
  // 为每个表单字段赋值对应data属性
  this.Form.get('Name').setValue(this.data.Name)
  this.Form.get('Address').setValue(this.data.Address)
}

3. 实现表单值回传父组件的逻辑

要把弹窗内的表单输入内容传递回父组件,需在弹窗组件中添加关闭Dialog时的参数传递逻辑:
首先在弹窗组件构造函数中注入MatDialogRef:

import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

constructor(
  public dialogRef: MatDialogRef<AddSerialLotComponent>,
  @Inject(MAT_DIALOG_DATA) public data:any,
  private fb:FormBuilder
) { }

然后在弹窗模板中添加提交按钮并绑定点击事件:

<button (click)="onSubmit()">提交</button>

最后在组件类中实现提交方法,将表单值作为关闭参数传递:

onSubmit() {
  // 将表单完整值传递回父组件
  this.dialogRef.close(this.Form.value);
}

完成以上修改后,父组件的afterClosed订阅就能接收到弹窗中用户输入的表单内容了。

内容的提问来源于stack exchange,提问作者Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:27:31