ngOnInit不在错误页面组件上运行

时间:2017-09-18 12:49:35

标签: angular error-handling ngoninit

Angular 4申请。

我正在尝试创建一个错误页面,以显示有关可能发生的未处理异常的一些信息。 <div pTooltip="Please upload" style="display:inline-block;" tooltipPosition="top" tooltipDisabled = "flag"> <button class="btn btn-primary btn-xs"><i class="fa fa-check" aria-hidden="true"></i></button> </div> 拦截最终错误,并将用户重定向到由单个GlobalErrorHandler组成的页面。发生错误时会显示页面,但不会调用生命周期挂钩。

ErrorHandler

ErrorComponent

错误成分

@Injectable()
export class GlobalErrorHandler extends ErrorHandler {

    constructor(
        private injector: Injector
    ) {
        // The true paramter tells Angular to rethrow exceptions, so operations like 'bootstrap' will result in an error
        // when an error happens. If we do not rethrow, bootstrap will always succeed.
        super(true);
    }

    handleError(error: any) {
        const router = this.injector.get(Router);

        if (!router.url.startsWith('/error')) {
            router.navigate(['/error']);
        }

        super.handleError(error); 
    }

}

plunkr上的工作演示。

我如何解决这个问题?也许有人知道解决方法? 感谢

1 个答案:

答案 0 :(得分:6)

找到this github issue后。您似乎只需在角度区域内运行router.navigate(...)代码即可启动并运行重定向:

ErrorHandler:

@Injectable()
export class GlobalErrorHandler extends ErrorHandler {

    constructor(private injector: Injector private zone: NgZone) {
        super();
    }

    handleError(error: any) {
        const router = this.injector.get(Router);
        super.handleError(error);
        if (!router.url.startsWith('/error')) {
            this.zone.run(()=>router.navigate(['/error']));
        }
    }

}