[英]Angular service providedIn VS forRoot
我想知道這兩個代碼塊是否等效。
我可以使用providedIn
與forRoot
相同的結果嗎?
@Injectable({
providedIn: 'root'
})
export class MyService {
constructor() { }
}
對比
@Injectable()
export class MyService {
constructor() { }
}
@NgModule({
imports: []
})
export class MyModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: MyModule,
providers: [
MyService
]
};
}
}
@NgModule({
imports: [
MyModule.forRoot()
],
bootstrap: [AppComponent]
})
export class AppModule { }
[我仍然會保留我的MyModule
以供providedId
的Id 單例服務單獨使用]
使用providedIn
與providers[]
:
providedIn
是 Angular 進行 DI 的新方法。 從 Angular 6 開始就引入了providedIn
正式名稱是“Tree-shakeable providers”——不再是提供所有服務的模塊,而是服務本身聲明應該在哪里提供它
使用providedIn: 'root'
完全不需要導入庫模塊,我們可以簡單地注入所需的服務,它就可以工作
是的, forRoot
和provideIn
都是等價的,因為它們都會為應用程序創建唯一且唯一的一個單例。 即使它被加載到延遲加載的組件中。
請參閱這篇不錯的文章 - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7
providedIn
將根據值直接注入service
- 如果它的“根”,它將直接注入根module
- 這將幫助您停止在模塊中添加service
[providers]
Angular 將在module
中注入服務 - 如果您使用延遲加載模塊 - Angular 將在您加載其他模塊時創建新的注入器
如果您使用延遲加載,最好在模塊上使用forRoot()
注入,並確保您的service
不會創建多個注入器
希望這對您有所幫助 - 編碼快樂!
檢查此鏈接以獲取更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.