我有一个根模块,它懒散地加载另一个模块。在这个延迟加载的模块中,路由有一个解析器,试图加载一些外部数据。如果失败,它将在自身中存储错误消息,并导航到错误组件。错误组件注入解析器,然后显示来自解析器的错误消息。
我已经调整了官方的角度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来确认这一点。你可以在普朗克上看到这一点,点击危机中心下的任何危机。您将不会看到正在显示的错误消息。
如果模块没有延迟加载(即我在根模块中显式地加载它),解析器现在是一个单例,并且我在ErrorComponent中显示了错误消息。你可以在普朗克上看到这一点,点击危机中心下的任何危机。您将看到显示错误消息。
我不明白为什么这不起作用,据我所知,CrisisDetailResolver被声明为app/crisis-center/crisis-center-routing.module.ts提供程序块中的单例。
发布于 2017-01-26 18:56:35
如果有人在这个问题上绊倒了,我发现我的问题是由角度问题引起的,应该尽快解决。
问题是,当前版本的if角2 (2.4.1)将创建一个新的模块(因此,一个新的注入器)与每个导航。这就是为什么我的提供者没有被当作单身。
我提出的GitHub问题可以在这里找到,并包含了对这个问题的更深入的解释:https://github.com/angular/angular/issues/13722。
发布于 2016-12-29 23:20:34
根据文档,延迟加载模块的提供程序是模块作用域。看起来像你的案子:https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-lazy-loaded-module-provider-visibility
https://stackoverflow.com/questions/41387854
复制相似问题