【发布时间】:2017-05-01 02:29:05
【问题描述】:
我正在使用 Angular 2 惰性路由。客户端与 webpack2 捆绑使用 AOT 和 angular-router-loader 以延迟加载子级。浏览器连接后一切正常,即我可以成功地将路由器导航到延迟加载的模块,块加载成功,我可以查看组件等。
但是,如果我模拟断开连接(例如,通过使用离线 chrome 开发人员工具选项),路由会按预期失败,因为它无法加载相关块。错误是“加载块 [块号] 失败”
之后路由命令不起作用,就像路由器坏了一样。
我尝试使用全局 ErrorHandler 来处理错误。这个想法是,也许我可以在它破坏路由器之前捕捉到错误,但到那时似乎为时已晚。在我发现错误时,路由器无法正常工作。
import { Injectable, ErrorHandler, Injector } from '@angular/core';
import { Router } from '@angular/router';
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
constructor(private injector: Injector) {
super(false);
}
private get router(): Router {
return this.injector.get(Router, null);
}
public handleError(error: Error) {
if (/Loading chunk [\d]+ failed/.test(error.message)) {
console.info('Offline mode');
let router = this.router;
if (router) {
router.navigateByUrl('/offline').then(t => console.debug(t+'')).catch(t=> console.debug(t));
} else {
window.location.href = '/';
}
}
}
}
自定义错误处理程序有效,因为打印了“离线模式”消息。注入也有效,路由器不为空,但路由器导航不起作用,路由器承诺未解决也未拒绝。
我想要完成的是处理错误(例如向用户显示信息性消息),同时让路由器处于工作状态,以便用户稍后可以导航(当互联网连接时已恢复)而无需重新加载整个页面。
更新 1:尝试在没有 aot 和 webpack 的情况下进行复制
为了查看这是否是角度路由器问题,我尝试查看尝试使用 jit 编译脱机工作时会发生什么。我使用:angular router plunker 导航到登录选项卡,切换到离线并按下登录。当客户端尝试加载管理模块时,记录了许多“错误:XHR 错误加载”错误。 最终导航失败,但此后路由导航并没有中断。我能够导航到其他选项卡,并且在切换回在线后,我什至能够导航到管理员。 也许问题在于 angular-router-loader webpack 插件如何尝试加载模块。
更新 2:似乎是一个已知问题
【问题讨论】:
-
这个问题有什么进展吗?我有同样的问题,我正在寻找答案。
标签: angular webpack lazy-loading offline angular2-aot