VS forRoot中提供的角度服务

时间:2018-11-11 18:28:53

标签: angular

我想知道这两个代码块是否相等。

我可以将providedIn用作相同的结果吗?

forRoot

vs

@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单例服务一起使用一次

3 个答案:

答案 0 :(得分:7)

使用providedInproviders[]

  1. providedIn是新的Angular DI方法。 providedIn是自Angular 6起带来的

  2. 正式名称是“可树状摇动的提供程序”-不再是提供其所有服务的模块,而是服务本身声明应在何处提供

  3. 使用providedIn: 'root'完全不需要导入库模块,我们只需注入所需的服务,它就可以正常工作

答案 1 :(得分:3)

是的,forRootprovideIn都是等效的,因为它们都将为该应用程序创建唯一的一个单例。即使已将其加载到延迟加载的组件中。

请参考这篇不错的文章-https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7

答案 2 :(得分:1)

providedIn将根据值直接注入service-如果它的“根”将直接注入根module-这将帮助您停止添加{{1 }}在模块service

Angular将在[providers]中注入服务-如果您使用的是惰性加载模块-每次加载其他模块时,angular都会创建新的注入器

如果您使用延迟加载,最好在模块上进行module注入,并确保forRoot()不创建多个注入器

希望这对您有帮助-编码愉快!!

选中此link以获取更多信息