簡體   English   中英

為什么在每個路線更改時實例化單例服務,而在Angular 6中不僅實例化一次?

[英]Why is a singleton service instantiated on every route change and not only once in Angular 6?

我有這樣定義的服務:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of, Subscription, combineLatest } from 'rxjs';
import { map, catchError, retry } from 'rxjs/operators';

@Injectable({
  providedIn: 'root',
})

export class MyDataService {
  constructor(private http: HttpClient) {
    console.log('Called MyDataService constructor');
  }
}

據我了解,此服務應在應用程序的整個運行過程中處於單一狀態。

現在,頁面刷新時,它會正確記錄“ Called DataService構造函數 ”。

不幸的是,當我導航到另一個頁面(帶有延遲加載模塊的新路由)時,構造函數再次運行,並且每次路由更改時都會記錄“ Called DataService構造函數 ”。

我錯過了什么?

ProvidedIn:'root'意味着它將僅被實例化一次,並且將向所有依賴項請求提供相同的實例。 如果看到構造函數運行不止一次,則可以在其他地方提供它。 按照providerIn搜索要提供它的位置:無需在提供列表中列出“ root”。 搜索“ provides:[”,然后查看提供MyDataService的內容並將其刪除。 如果使用的是VS Code,則可以右鍵單擊類名稱,然后選擇“找到所有引用”,然后查看它在Provides數組中的位置。

暫無
暫無

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

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