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

如何在Angular可复用模态对话框中展示不同输入字段的数据

解决方案

1. 修改模板中的点击事件,传入对应要展示的数据

给两处openDialog调用传入对应位置的数据源,可根据实际展示需求调整传入字段:

<!-- 第一处:标准名称旁的language图标 -->
<mat-icon style="margin-left: 0.5rem; margin-top: 0.6rem; font-size: 2rem;cursor: pointer;" (click)="openDialog({title: '标准多语言名称', content: foodModel.standardName, list: foodModel.localisedName})">language</mat-icon>

<!-- 第二处:表格行内的language图标 -->
<mat-icon style="margin-left: 0.6rem;" (click)="openDialog({title: '餐食多语言名称', content: food.localisedName | head, list: food.localisedName})">language</mat-icon>

2. 修改组件的openDialog方法,接收参数并传给模态框

调整openDialog逻辑,支持传入自定义数据,同时关闭已打开的模态框实现新内容替换旧内容的效果:

openDialog(passData: any){
  // 关闭已存在的模态框,避免叠加展示
  if (this.dialog.openDialogs.length) {
    this.dialog.closeAll();
  }
  const dialogRef = this.dialog.open(ModalAllComponent, {
    width: '14.5rem',
    data: passData
  })
}

3. 调整模态组件ModalAllComponent接收并展示数据

首先在模态组件TS文件中注入MAT_DIALOG_DATA获取传入参数:

import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';

@Component({
  selector: 'app-modal-all',
  templateUrl: './modal-all.component.html',
  styleUrls: ['./modal-all.component.scss']
})
export class ModalAllComponent {
  constructor(@Inject(MAT_DIALOG_DATA) public modalData: any) { }
}

然后在模态组件模板中动态渲染内容即可,示例:

<h3>{{ modalData.title }}</h3>
<p>当前值:{{ modalData.content }}</p>
<!-- 有多语言列表时可遍历展示 -->
<div *ngIf="modalData.list?.length">
  <p>全部多语言配置:</p>
  <div *ngFor="let item of modalData.list">
    {{item.lang || item.code}}: {{item.value}}
  </div>
</div>

后续有其他位置需要复用该模态框时,只需调用openDialog时传入对应格式的数据即可,无需修改模态组件核心逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:03