我有一个懒惰加载另一个模块的根模块。在这个延迟加载的模块中,路由有一个试图加载一些外部数据的解析器。如果失败,则会在其自身中存储错误消息,并导航到错误组件。错误组件已注入解析器,然后应显示解析程序的错误消息。
我通过以下方式调整了官方的Angular 2英雄之旅:
app/crisis-center/crisis-detail-resolver.service.ts
- 修改为始终设置errorMessage
字段,然后导航至ErrorComponent
。之前导航到/crisis-center
命令。app/crisis-center/error.component.ts
- 新添加。将CrisisDetailResolver
作为依赖项,并显示errorMessage
。如果crisis-center.module.ts
延迟加载,则注入ErrorComponent
的解析器与路由器中使用的解析器不同。我只能通过调试时解析器中没有errorMessage
来确认这一点。您可以点击危机中心下的任何危机,在plnkr上看到这一点。您将看不到显示的错误消息。
如果模块没有延迟加载(即我在根模块中显式加载),解析器现在是一个单例,我有错误消息显示在ErrorComponent
中。您可以点击危机中心下的任何危机,在plnkr上看到这一点。您将看到显示的错误消息。
我很困惑为什么这不起作用,据我所知,CrisisDetailResolver
被声明为app/crisis-center/crisis-center-routing.module.ts
的提供程序块中的单例。
答案 0 :(得分:1)
如果有人遇到这个问题,我发现我的问题是由Angular中的问题引起的,应尽快解决。
问题是当前版本如果Angular 2(2.4.1)将为每个导航创建一个新模块(并因此创建一个新的注入器)。这就是为什么我的提供者不被保留为单身人士的原因。
我提出的GitHub问题可以在这里找到,并且包含对问题的更深入的解释:https://github.com/angular/angular/issues/13722
答案 1 :(得分:0)
根据文档,延迟加载模块的提供程序是模块范围的。看起来像你的情况:https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-lazy-loaded-module-provider-visibility