【发布时间】:2020-03-03 06:06:20
【问题描述】:
我有一个使用 Angular 8 实例化两次的服务。
它在服务装饰器上用provided in: 'root' 声明。
仅当我将服务注入顶部组件和另一个组件时才会发生这种情况。
其他组件可以相互调用,所以我的层次结构如下:
顶部组件
组件1
组件2
组件1
组件3
组件2
如果我在组件 1 和组件 2 中注入服务,我没有任何问题
如果我在 Top Component、Component1 和 component2 中注入服务,则服务会被实例化两次(1 次用于顶级组件,1 次用于其他组件)。该服务帮助我在组件之间进行通信。因此组件 1 和 2 的实例可以通信,但由于顶级组件有自己的服务,它无法从其他组件接收任何信息。
另外2条信息:
- 使用生产模式时我没有这个问题(现在我在本地使用 ng serve 在开发模式下工作)
- 如果我删除provided in: 'root' 并在根@NgModule 中声明服务,
1) 如果我在 component1 中注入服务(例如),它可以正常工作
2)如果我在顶级组件中注入服务,我有一个注入错误指出no provider for...
我看到通过在构造函数中放置一个 console.log 来实例化服务两次(顺便说一句,console.log 没有出现在 2 个实例的同一行上,其中一个服务似乎首先被转译,所以console.log 不在同一行执行) console log at new instance
我无法在新的 Angular 项目中复制错误
抱歉,我无法发布任何特定代码。任何关于正在发生或可能发生的事情的线索,将不胜感激!谢谢
【问题讨论】:
-
你能展示一下stackblitz吗?
-
我无法在基本的 Angular 项目中复制错误,也无法展示我的实际项目。不幸的是,不确定我可以在堆栈闪电战中展示什么。
标签: angular