繁体   English   中英

Angular 2进样器层次结构和NgModule

[英]Angular 2 injector hierarchy and NgModule

我不知道NgModule实际上如何影响Angular 2注入器层次结构。

在具有嵌套模块的应用程序中,层次结构是什么样的? 它是否为每个模块创建一个新的注射器实例,还是可以访问顶级注射器(类似于Angular 1.x模块)?

在大型应用程序中弄清楚这棵树可能有些令人困惑。

有没有一种方法可以打印出,检查或直观地查看注射器的层次结构(就像可以在Angular 1.x中对作用域层次结构进行操作一样)?

根据模块文档: https : //angular.io/docs/ts/latest/guide/ngmodule.html

Angular将这些提供程序注册到模块执行上下文的根注入器中。 这是应用程序启动时加载的所有模块的应用程序的根注入器。

Angular可以将这些提供程序服务之一注入到应用程序的任何组件中。 如果此模块提供了HeroService,或者启动时加载的任何模块都提供了HeroService,则Angular可以将相同的HeroService实例注入任何应用程序组件中。

延迟加载的模块具有自己的子根注入器,它通常是应用程序根注入器的直接子代。

延迟加载的服务仅限于延迟模块的注入器。 如果延迟加载的模块还提供HeroService,则在该模块的上下文中创建的任何组件(例如,通过路由器导航)都将获取服务的本地实例,而不是根应用程序注入器中的实例。

外部模块中的组件继续接收为应用程序根目录创建的实例。

因此,您有一个在所有模块之间共享的注射器。 但是,延迟加载的组件将具有子注入器

您应该能够在浏览器控制台中使用ng.probe($0)调查提供程序。 另请参阅https://stackoverflow.com/a/35233711/217408

您可以使用MyModule.forRoot()加载模块(另请参见https://angular.io/docs/ts/latest/guide/ngmodule.html#!#providers ),以在根级别添加提供程序。

如果您在模块中提供它,那么该模块中的组件可以使用它。 我还没有看到它提到模块明确地引入了子注入器,但是在我看来这确实是必须的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM