我正在使用以下参数构建我的角度应用程序 ng build --prod --env = production --aot
以上命令始终使用新的哈希文件名生成所有新块,供应商和捆绑文件。我在Ubuntu服务器上通过Apache2提供dist文件夹。
我的问题是当我制作新版本并从我的服务器提供新文件时,我的所有用户都开始出现以下错误
Unhandled Promise rejection: Loading chunk 2 failed. ; Zone: angular ; Task: Promise.then ; Value: Error: Loading chunk 2 failed
Cannot read property 'map' of undefined
刷新页面后一切正常,但直到所有用户都看到白屏。有什么方法可以处理这个错误并自动用代码重新加载页面吗?
angular-cli: 1.0.0-beta.24
node: 6.2.2
os: darwin x64
@angular/common: 2.4.3
@angular/compiler: 2.4.3
@angular/core: 2.4.3
@angular/forms: 2.4.3
@angular/http: 2.4.3
@angular/platform-browser: 2.4.3
@angular/platform-browser-dynamic: 2.4.3
@angular/router: 3.4.3
@angular/compiler-cli: 2.4.3
答案 0 :(得分:-2)
我解决了以下问题:您可以提供ExtraOptions
的自定义实现,您可以根据需要执行任何错误处理:
import {Injectable} from '@angular/core';
import {ExtraOptions} from "@angular/router";
import {ErrorHandler} from "@angular/router/src/router";
@Injectable()
export class CustomRoutingExtraOptions implements ExtraOptions {
public errorHandler: ErrorHandler; // Overwrites attribute in ExtraOptions!
constructor(/* inject any services you need here.. */) {
this.errorHandler = error => {
console.error('routing error: ', error);
// any other custom handling..
}
}
}
您需要在模块中注册此服务,如下所示:
import {ROUTER_CONFIGURATION} from "@angular/router";
@NgModule({
declarations: [
..
],
imports: [
RouterModule.forRoot({...})
...
],
providers: [
{provide: ROUTER_CONFIGURATION, useClass: CustomRoutingExtraOptions},
...
],
})
export class AppModule {
}
或者(如果您只需要简单的错误处理),您可以直接在RouterModule.forRoot(..)
的第二个参数中提供错误处理程序。