angular – ngOnInit不在错误页面组件上运行
发布时间:2020-12-17 17:33:46 所属栏目:安全 来源:网络整理
导读:Angular 4应用程序. 我正在尝试创建一个错误页面,以显示有关可能发生的未处理异常的一些信息. GlobalErrorHandler拦截最终错误并将用户重定向到由单个ErrorComponent组成的页面.发生错误时会显示页面,但不会调用生命周期挂钩. ErrorHandler: @Injectable()e
Angular 4应用程序.
我正在尝试创建一个错误页面,以显示有关可能发生的未处理异常的一些信息. GlobalErrorHandler拦截最终错误并将用户重定向到由单个ErrorComponent组成的页面.发生错误时会显示页面,但不会调用生命周期挂钩. ErrorHandler: @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); } } ErrorComponent: @Component({ selector: 'error-desc',template: '<h1>Error page = {{code}}</h1>' changeDetection: ChangeDetectionStrategy.OnPush }) export class ErrorComponent implements OnInit { public code: string = ''; constructor( ) {} ngOnInit() { // not called this.code="AAAA"; console.log("OnInit"); } ngOnDestroy() { console.log("OnDestroy"); } } plunkr的工作演示. 我怎么解决这个问题?也许有人知道解决方法? 解决方法
找到
this github issue.看起来你只需要在angular的区域内运行你的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'])); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |