Angular2 ng构建问题:加载块x失败

时间:2017-01-27 12:11:03

标签: angularjs angular2-aot

我正在使用以下参数构建我的角度应用程序 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

1 个答案:

答案 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(..)的第二个参数中提供错误处理程序。