Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 更新信息传递到对话框_Angular - Fatal编程技术网

Angular 更新信息传递到对话框

Angular 更新信息传递到对话框,angular,Angular,我有一个组件,当点击时,它会获取数据,接收数据,打开一个模式并将数据传递给它 虽然modal仍然开放,但我进一步要求提供更多数据 如何将新数据传递到已打开的模式 这是获取并打开对话框的代码 updateSomeData() { // fetch additional data } openDialog() { this.cqohs.fetchData(this.itemSelected).subscribe(({ data }: any) => { this.dialog.op

我有一个组件,当点击时,它会获取数据,接收数据,打开一个模式并将数据传递给它

虽然modal仍然开放,但我进一步要求提供更多数据

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

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

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
,以获取额外的数据,我希望这些数据被转发回对话框,但没有发生。额外的数据会被提取出来,但不会传递给现在已经打开的对话框

问题

  • 如何将新找到的数据传递到已打开的对话框中

  • 如果不可能,我会假设我的方法是反模式的,如果是这样,我如何以我期望的方式来处理这个问题


  • Material对话框中的数据注入(我假设您使用它?)正在使用
    PortalInjector
    s:打开模式时,令牌被注入其中

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

    您有几种解决方案:

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

    如果您很难选择解决方案,请告诉我们您试图实现的目标,然后我们可以提供最佳选项。

    材质对话框中的数据注入(我假设您使用它?)正在使用
    PortalInputor
    s:打开模式时,会将令牌注入其中

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

    您有几种解决方案:

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

    如果您很难选择解决方案,请告诉我们您想要实现的目标,然后我们可以提供最佳选择。

    您似乎在使用角材料。根据文件

    打开api返回对新打开对话框的引用。因此,您可以利用这一点,在需要时随时更改并传递新值

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


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

    您似乎在使用棱角材料。根据文件

    打开api返回对新打开对话框的引用。因此,您可以利用这一点,在需要时随时更改并传递新值

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


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

    好东西。即使我知道这件事,我也不会想到。看起来不是很好的代码,但做了我想要的。我接受这个,好东西。即使我知道这件事,我也不会想到。看起来不是很好的代码,但做了我想要的。我接受这个。