[英]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.