簡體   English   中英

Angular 服務被實例化兩次

[英]Angular Service gets instantiated twice

我有一個使用 Angular 8 實例化兩次的服務。
它在服務裝飾器上用provided in: 'root'
僅當我將服務注入頂部組件和另一個組件時才會發生這種情況。
其他組件可以互相調用,所以我有一個如下的層次結構:

頂部組件
組件1
組件2
組件1
組件3
組件2

如果我在component1和component2中注入服務,我沒有任何問題
如果我在頂級組件、組件 1 和組件 2 中注入服務,則服務會被實例化兩次(1 次用於頂級組件,1 次用於其他組件)。 該服務幫助我在組件之間進行通信。 因此組件 1 和 2 的實例可以通信,但由於頂級組件有自己的服務,它無法從其他組件接收任何信息。

2 其他資料:
- 使用生產模式時我沒有這個問題(現在我在本地使用 ng serve 在開發模式下工作)
- 如果我刪除provided in: 'root'並在根@NgModule中聲明服務,

1)如果我在component1中注入服務(例如),它工作正常
2) 如果我在頂級組件中注入服務,我有一個注入錯誤,說明no provider for...

我看到通過在構造函數中放置一個console.log來實例化服務兩次(順便說一句,console.log沒有出現在2個實例的同一行,其中一個服務似乎首先被轉譯,所以console.log不在同一行執行)新實例的控制台日志

我無法在新的 angular 項目中復制錯誤

抱歉,我無法發布任何特定代碼。 任何關於正在發生或可能發生的事情的線索,將不勝感激! 謝謝

好的,所以我一磚一瓦地解構項目和有缺陷的組件,我找到了罪魁禍首:
import { SomeService } from 'src/app/services/some-service.service.js';

看起來足夠無害,當您快速查看時。 這很奇怪,因為我很確定這是從 Angular 自動導入的,但請注意最后的.js嗎? 好吧,由於初始文件是.ts ,它似乎正在將其轉換為 Javascript 並將其視為另一項服務。 這是一個非常具體的問題,但我發布答案以防萬一有人遇到它。 刪除.js即可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM