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

Angular中如何在ts文件内实现不同组件之间的数据传递

Angular ts文件中动态创建组件传值方案

你当前使用的是封装好的模态框服务动态加载组件,不需要通过模板的@Input传值,直接通过模态框开放的配置参数传递即可,操作步骤如下:

  • 步骤1:父组件传值逻辑修改
    在modal.open()方法的第二个入参新增配置项,把需要传递的变量放入data字段中,修改后代码如下:
public openSelectRolesModal() {   
    this.modal.open(
        SelectCustomersProjectModalComponent,
        // 新增配置参数
        {
          data: {
            category: this.category,
            data: this.data
          }
        }
    ).afterClosed().subscribe((users: User[]) => {
        if (!users) return;
        this.setRoles(users);
    });
}
  • 步骤2:子组件接收参数
    如果是Angular Material Dialog,在子组件构造函数中注入MAT_DIALOG_DATA即可拿到传递的参数,示例代码如下:
import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';

// 可自定义类型替换any,保证类型安全
interface IModalInput {
  category: 你的category变量对应类型,
  data: 你的data变量对应类型
}

@Component({
  // 你的组件原有配置
})
export class SelectCustomersProjectModalComponent {
  constructor(
    @Inject(MAT_DIALOG_DATA) public inputData: IModalInput
  ) {
    // 构造函数内即可拿到值,也可在ngOnInit等生命周期中直接使用
    console.log('接收的category', this.inputData.category);
    console.log('接收的data', this.inputData.data);
  }
}

如果是ng-bootstrap Modal,注入NGB_ACTIVE_MODAL令牌取data字段即可,逻辑完全一致。

拓展:如果是自己手动通过ComponentFactoryResolver动态创建组件,也可以拿到组件实例后直接给@Input装饰的属性赋值,效果和模板传值一致:

const componentRef = viewContainerRef.createComponent(SelectCustomersProjectModalComponent);
// 直接给@Input属性赋值
componentRef.instance.category = this.category;
componentRef.instance.data = this.data;

封装好的模态框已经把这层逻辑做了封装,直接用官方提供的data参数传值更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:03