Angular Service被实例化了两次



我有一个服务,它用Angular 8实例化了两次。
它在服务装饰器上用provided in: 'root'声明
只有当我将服务注入顶部组件和另一个组件时,才会发生这种情况
其他组件可以相互调用,所以我有一个如下的层次结构:

顶部组件
Component1
Component2
Component 1
Component3
Component 2

如果我在component1和component2中注入服务,我不会有任何问题
如果我在Top Component、component1和component2中注入服务,服务会被实例化两次(1次用于Top Component,1次用于其他组件(。此服务帮助我在组件之间进行通信。因此,组件1&2可以通信,但由于顶级组件有自己的服务,它无法从其他组件接收任何信息。

另外2条信息:
-我在使用生产模式时没有这个问题(目前我在开发模式下使用ng服务在本地工作(
-如果我删除provided in: 'root'并在root@NgModule、中声明服务

1( 如果我在component1中注入服务(例如(,它工作正常
2(如果我在Top Component中注入服务,我会有一个注入错误,声明no provider for...

我看到,通过在构造函数中放入console.log,服务被实例化了两次(顺便说一句,对于这两个实例,console.log没有出现在同一行,其中一个服务似乎是先被transpile的,所以console.log不是在同一行都执行的(新实例的控制台日志

我无法在新的角度项目中复制错误

对不起,我不能发布任何特定的代码。任何正在发生或可能发生的事情的线索,我们都将不胜感激!感谢

好的,所以逐个解构项目和有缺陷的组件,我发现了罪魁祸首:
import { SomeService } from 'src/app/services/some-service.service.js';

看起来很无害,当你快速看的时候。这很奇怪,因为我很确定它是从Angular自动导入的,但注意到最后的.js了吗?好吧,由于初始文件是.ts,所以它似乎将其转换为Javascript,并将其视为另一个服务。这是一个非常具体的问题,但我会发布答案,以防有人遇到。删除.js可以解决问题。

最新更新