我想知道NgModule
实际上如何影响Angular 2注入器层次结构。
在具有嵌套模块的应用中,层次结构是什么样的?它是为每个模块创建一个新的注入器实例还是可以访问顶级注入器(类似于Angular 1.x模块)?
在一个大应用程序中找出树可能有点令人困惑。
有没有办法在视觉上打印,检查或探索喷射器的层次结构(就像在Angular 1.x中可以对范围层次结构那样)?
答案 0 :(得分:2)
您应该能够在浏览器控制台中使用ng.probe($0)
调查提供商。另请参阅https://stackoverflow.com/a/35233711/217408。
您可以使用MyModule.forRoot()
加载模块(另请参阅https://angular.io/docs/ts/latest/guide/ngmodule.html#!#providers)以在根级别添加提供程序。
如果您在模块中提供它,则该模块中的组件可以使用它。我还没有看到它提到一个模块明确地引入了一个子注入器,但对我来说这看起来就像是这样。
答案 1 :(得分:2)
根据模块文档:https://angular.io/docs/ts/latest/guide/ngmodule.html
Angular使用模块执行上下文的根注入器注册这些提供程序。这是应用程序启动时加载的所有模块的应用程序根注入器。
Angular可以将其中一个提供者服务注入任何组件 在申请中。如果此模块提供HeroService,或任何 在启动时加载的模块提供了HeroService,Angular可以注入 任何应用程序组件都使用相同的HeroService。
延迟加载的模块有自己的子根注入器,通常是 应用程序根注入器的直接子代。
延迟加载的服务范围限定为惰性模块的注入器。如果一个 延迟加载模块还提供HeroService,任何组件 在该模块的上下文中创建(例如,通过路由器导航)获得 服务的本地实例,而不是根目录中的实例 应用注射器。
外部模块中的组件继续接收实例 为应用程序根目录创建。
因此,您有一个在所有模块之间共享的注入器。但是,延迟加载的组件将具有子注入器