代码之家  ›  专栏  ›  技术社区  ›  Siya Mzam

传递到对话框的更新信息

  •  0
  • Siya Mzam  · 技术社区  · 6 年前

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

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

    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 回复  |  直到 6 年前
        1
  •  1
  •   user4676340 user4676340    6 年前

    材料对话框中的数据注入(我想你会用吗?)正在与 PortalInjector s:当模态被打开时,令牌被注入其中。

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

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

    • 将当前对象应用于函数 b: this.updateSomeData.apply(this) (尽管不推荐)
    • 将函数直接添加到 DialogComponent 对话框组件
    • 使用静态方法设置组件(也不推荐)
    • 在打开对话框之前加载所有数据
    • ...

        2
  •  1
  •   Vikhyath Maiya    6 年前

    你好像在用有棱角的材料。根据文件 Here

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

    openDialog() {
        let component = this.dialog.open(DialogDataExampleDialog, {
          data: {
            animal: 'panda'
          }
        });
        setTimeout(() => {
            component.componentInstance.data.animal = 'lion'
        }, 5000)
      }
    

    看到它工作了吗 Here . 等待5秒,然后查看数据更改。

    你也可以使用共享服务完成任务,希望这能有所帮助。