【问题标题】:Angular Service gets instantiated twiceAngular Service 被实例化了两次
【发布时间】: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


【解决方案1】:

好的,所以一砖一瓦地解构项目和有缺陷的组件我找到了罪魁祸首:
import { SomeService } from 'src/app/services/some-service.service.js';

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多