gpt4 book ai didi

angular - 具有 Primeng 动态对话框的多个服务相互干扰

转载 作者:行者123 更新时间:2023-12-03 19:16:28 30 4
gpt4 key购买 nike

我正在努力解决 angular/primeng 问题。我在不同的模块中有两个服务,每个模块都使用 DialogService 创建一个 DynamicDialog 组件。

我已经读过,如果您同时有多个模式,您需要单独的 DialogService 实例。我试图通过将每个服务放在它们自己的模块中并将 DialogService 放在每个模块的“提供者”部分来实现这一点。

每个模态本身都可以正常工作,但是我遇到了两个模态同时显示的情况。
在这种情况下,在我关闭第二个模式后,我无法关闭第一个模式,即使关闭代码被触发并返回结果。

这个问题的一个例子的 stackblitz 是:

https://stackblitz.com/github/thomasesh/twomodalproblem

任何帮助将不胜感激。

最佳答案

原因是 Angular DI。你在 app-module 中导入了 module-a 和 module-b。他们都提供DialogService。并且由于 DI 的工作方式,创建了服务的 SINGLE 实例。这是 imo primeng 错误,但要解决它,您可以创建一个 token 并使用 token 提供(并注入(inject))服务的第二个实例,而不是使用相同的服务实例

// token.ts
export const DialogServiceToken = new InjectionToken('DialogService');
//module-b.ts

providers: [
{ provide: DialogServiceToken, useClass: DialogService} // this will register second instance of DialogService
]

//module-b.service
constructor( @Inject(dialogServiceToken) private dialogService: DialogService) {} // here we inject the second instance of a service

关于angular - 具有 Primeng 动态对话框的多个服务相互干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60308290/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com