我有一个组件,当点击它,获取数据,接收它并打开一个模态并将这些数据传递给它。
虽然模态仍处于打开状态,但我还要求提供其他数据。
如何将新数据传递到已打开的模式?
这是获取和打开对话框的代码
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
来获取附加数据,我期望将其转发回对话框但是没有发生。获取附加数据但不传递给现在已经打开的对话框。
问题
“材质”对话框中的数据注入(我假设您使用它?)正在使用PortalInjector
s:当打开模态时,会将令牌注入其中。
如果您希望向对话框发送其他数据,则不能。
您有几种解决方案可以解决这个问题:
b: this.updateSomeData.apply(this)
中,以便它不依赖于另一个组件来运行函数:依赖项已经加载到DialogComponent
中。如果您很难选择解决方案,或许给我们您想要实现的目标,那么我们可以提供最佳选择。
你似乎在使用棱角分明的材料。根据文件DialogComponent
open api return参考新打开的对话框。因此,您可以使用它并在需要时更改传递新值。
Here
看到它工作openDialog() {
let component = this.dialog.open(DialogDataExampleDialog, {
data: {
animal: 'panda'
}
});
setTimeout(() => {
component.componentInstance.data.animal = 'lion'
}, 5000)
}
。等待5秒钟,看看数据是否有变化。
您也可以使用共享服务完成工作,希望这会有所帮助。