更新信息传递给对话框

问题描述 投票:0回答:2

我有一个组件,当点击它,获取数据,接收它并打开一个模态并将这些数据传递给它。

虽然模态仍处于打开状态,但我还要求提供其他数据。

如何将新数据传递到已打开的模式?

这是获取和打开对话框的代码

updateSomeData() {
  // fetch additional data
}

openDialog() {
 this.cqohs.fetchData(this.itemSelected).subscribe(({ data }: any) => {
  this.dialog.open(DialogComponent,
    {
      data: {
        a: this.someData,
        b: this.updateSomeData
      }
    });

这段代码打开并正确地将数据传递给对话框和对话框组件本身,基于某些条件,我调用函数b来获取附加数据,我期望将其转发回对话框但是没有发生。获取附加数据但不传递给现在已经打开的对话框。

问题

  1. 如何将新找到的数据传递到已打开的对话框中?
  2. 如果不可能的话,我会假设我的方法是一种反模式,如果是这样的话,我怎样才能以我期望的方式处理这种方式呢?
angular
2个回答
1
投票

“材质”对话框中的数据注入(我假设您使用它?)正在使用PortalInjectors:当打开模态时,会将令牌注入其中。

如果您希望向对话框发送其他数据,则不能。

您有几种解决方案可以解决这个问题:

  • 使用服务共享数据
  • 使用qazxsw poi将当前对象应用于函数(虽然不推荐)
  • 将函数直接添加到b: this.updateSomeData.apply(this)中,以便它不依赖于另一个组件来运行函数:依赖项已经加载到DialogComponent中。
  • 使用静态方法设置组件(也不推荐)
  • 在打开对话框之前加载所有数据
  • ...

如果您很难选择解决方案,或许给我们您想要实现的目标,那么我们可以提供最佳选择。


1
投票

你似乎在使用棱角分明的材料。根据文件DialogComponent

open api return参考新打开的对话框。因此,您可以使用它并在需要时更改传递新值。

Here

看到它工作openDialog() { let component = this.dialog.open(DialogDataExampleDialog, { data: { animal: 'panda' } }); setTimeout(() => { component.componentInstance.data.animal = 'lion' }, 5000) } 。等待5秒钟,看看数据是否有变化。

您也可以使用共享服务完成工作,希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.