Max*_*kyi 3 angular2-di angular
假设我有以下LazyModule是懒惰加载并在其中LazyComponent声明的内容:
@NgModule({
declarations: [LazyComponent],
providers: [LazyModuleService],
})
export class LazyModule { ...
@Component({
selector: 'my-lazy',
providers: [LazyComponentService]
})
export class LazyComponent { ...
Run Code Online (Sandbox Code Playgroud)
我的理解是,当加载LazyModuleangular时会为这个模块创建一个子注入器rootInjector,如下所示:
var lazyModuleInjector = rootInjector.resolveAndCreateChild([LazyModuleService]);
Run Code Online (Sandbox Code Playgroud)
然后创建一个这样的子注入器LazyComponent:
var lazyModuleInjector = lazyModuleInjector.resolveAndCreateChild([LazyComponentService]);
Run Code Online (Sandbox Code Playgroud)
所以最终注入器树是这样的:
这是对的吗?
是的,这是正确的.这不是故意的,而是因为注射器在创建之后是只读的.由于延迟加载的模块稍后加载,因此无法将其提供程序添加到应用程序根提供程序,因为此提供程序已经被密封.这就是为什么他们为延迟加载的模块引入了一个新的根作用域.
如果您想要由延迟加载的模块提供的提供程序的全局提供程序(单例),请在延迟加载的模块中实现forRoot()并在那里提供全局提供程序,然后仅将提供程序导入应用程序根范围imports: [LazyModule.forRoot()].
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |