簡體   English   中英

如果在 2 個延遲加載模塊中使用了 Angular 服務,則為providedIn 設置什么

[英]What to set for providedIn, if Angular service is used in 2 lazy loaded modules

由於 Angular 6 推薦的方法是使用Injectable providedIn屬性。

但是如果需要在 2 個延遲加載模塊中使用服務怎么辦?
創建共享模塊然后在兩個延遲加載的模塊中導入共享模塊是否仍然認為是最佳實踐?

像這樣的東西(按照鏈接以避免循環引用警告):

//Shared module
@NgModule({})
export class SharedModule { }

//Shared service
@Injectable({
  providedIn: SharedModule
})
export class SharedService { }


//Lazy loaded modules A and B
@NgModule({
  imports: [SharedModule]
})
export class LazyModuleA { }

@NgModule({
  imports: [SharedModule]
})
export class LazyModuleB { }

根據第一個答案進行編輯:會有相當(40-80)的服務。

我不認為這是一個好主意。因為你在注入器中注入一個服務來應對可能發生或可能不會發生的情況。當你在 ShareModule 中注入這個服務時,這個服務一直存在,直到你的應用程序還活着。讓我們想象一個情況你有很多這樣的場景,你在注入器中注入了大量消耗內存的服務。 我認為最好在 lazyLoad 模塊級別注入此服務。

這是我在 Angular 6(及更高版本)中觀察到的服務

您可以安全地使用“providedIn:'root'”

唯一的問題是請不要將它添加到 app.module (或您擁有的任何入口模塊)的導入中。 如果添加它,它將立即加載。

否則,如果您使用 "providedIn: 'root'" 並且它在任意數量的模塊中使用,則在使用該服務的任何模塊加載之前它不會加載。

加載后,它在使用它的模塊之間共享相同的引用。

示例說明:

服務 A(以 root 身份提供)

應用模塊

懶惰模塊1(不使用服務A)

懶惰模塊2(使用服務A)

懶惰模塊3(不使用A)

懶惰模塊4(使用A)

服務 A 將在加載 lazy-module-2 或 lazy-module-4 時加載。 加載后,它會留在應用程序中

如果您想要一個演示應用程序,請告訴我。

暫無
暫無

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

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