簡體   English   中英

Angular 服務在 VS forRoot 中提供

[英]Angular service providedIn VS forRoot

我想知道這兩個代碼塊是否等效。

我可以使用providedInforRoot相同的結果嗎?

@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 單例服務單獨使用]

使用providedInproviders[]

  1. providedIn是 Angular 進行 DI 的新方法。 從 Angular 6 開始就引入了providedIn

  2. 正式名稱是“Tree-shakeable providers”——不再是提供所有服務的模塊,而是服務本身聲明應該在哪里提供它

  3. 使用providedIn: 'root'完全不需要導入庫模塊,我們可以簡單地注入所需的服務,它就可以工作

是的, forRootprovideIn都是等價的,因為它們都會為應用程序創建唯一且唯一的一個單例。 即使它被加載到延遲加載的組件中。

請參閱這篇不錯的文章 - 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.

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