首页 文章

延迟加载模块中的Angular 4.4.6共享服务

提问于
浏览
2

我正在谷歌搜索约2周,但找不到任何合适的答案我的问题 . 所以我在这里问 .

Description

Tools: Angular 4.4.6 and Angular-CLI 1.4.9

我有相当简单的应用程序,我正在努力 . 它有AuthModule,AdminModule,LayoutModule和SharedModule . 如果我将所有这些模块添加到AppModule,一切正常,但问题是当我添加这些模块时,AppModule然后我的供应商....大小超过600kb(--aot) .

Explanation of modules.

ShareModule :具有每个模块共有的一些模型和服务,例如 HttpService . AuthModule: 包含使用共享模块中的 HttpService 的简单登录和注册组件

所以我决定将它们全部作为带有路由的延迟加载模块,这将被描述为here . 这将供应商... js的大小减少了近50%但随后依赖性不起作用 .

虽然我在LazyLoaded模块中引用了SharedModule,但仍然无法解决问题,但依赖关系不起作用 . 我知道,每个延迟加载的模块都会创建自己的DI树,但它不会解析除了在延迟加载的模块中创建和提供的依赖项之外的依赖项 .

正如我在工具部分中所说,我使用的是Angular-CLI,它具有检测在某些组件中使用两次的类似模块的强大功能,如果是这样,那么它为该模块创建了一个公共的... js . 但仍然是问题仍然无法访问延迟加载模块中的共享服务 .

Is there a possibility or can anyone point me how to load shared services in lazy loaded modules?

谢谢

2 回答

  • 2

    如果您希望延迟加载的模块中的服务可用作全局单例并且随处可用,请在 AppModule 中实现 forRoot 并导入 MyLazyModule.forRoot() . 这样,提供程序在全局注册,而其余的是延迟加载 .

    有关详细信息,请参阅https://angular.io/guide/ngmodule#configure-core-services-with-coremoduleforroot .

  • 3

    我找到了解决方案 . agular documentation中提到的只是之前没有引起我的注意 .

    不要在共享模块中指定应用程序范围的单例提供程序 . 导入该共享模块的延迟加载模块会创建自己的服务副本 .

    您需要做的是不要从共享模块提供和服务 . 只需在延迟加载的模块中导入共享模块,并从该延迟加载的模块中提供服务 .

    我希望这会帮助别人 .

    快乐的编码 . :)

相关问题