我想知道这两个代码块是否相等。
我可以将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
单例服务一起使用一次
答案 0 :(得分:7)
使用providedIn
与providers[]
:
providedIn
是新的Angular DI方法。 providedIn
是自Angular 6起带来的
正式名称是“可树状摇动的提供程序”-不再是提供其所有服务的模块,而是服务本身声明应在何处提供
使用providedIn: 'root'
完全不需要导入库模块,我们只需注入所需的服务,它就可以正常工作
答案 1 :(得分:3)
是的,forRoot
和provideIn
都是等效的,因为它们都将为该应用程序创建唯一的一个单例。即使已将其加载到延迟加载的组件中。
请参考这篇不错的文章-https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7
答案 2 :(得分:1)
providedIn
将根据值直接注入service
-如果它的“根”将直接注入根module
-这将帮助您停止添加{{1 }}在模块service
Angular将在[providers]
中注入服务-如果您使用的是惰性加载模块-每次加载其他模块时,angular都会创建新的注入器
如果您使用延迟加载,最好在模块上进行module
注入,并确保forRoot()
不创建多个注入器
希望这对您有帮助-编码愉快!!
选中此link以获取更多信息