我有一个ErrorHandler
,用于记录所有异常&然后将用户重定向到通用错误页面。问题是只有当处理的异常发生在任何lifecycle hooks(或构造函数)之外时,这才有效。方法。请考虑使用ngOnInit
的以下示例:
class MyErrorHandler implements ErrorHandler {
constructor(private injector: Injector) { }
handleError(error) {
// log error
var router = this.injector.get(Router);
router.navigate['/error'];
}
}
正确调用错误处理程序。但是,router.navigate仅在组件初始化后发生异常时才起作用。
不起作用:
import { Component, OnInit} from '@angular/core';
@Component({
template: ''
})
export class SampleComponent implements OnInit{
ngOnInit() {
throw Error(`Boom!`);
}
}
按预期工作:
import { Component, OnInit} from '@angular/core';
@Component({
template: `<button (click)="handleClick()">click me</button>`
})
export class SampleComponent{
private handleClick(): void{
throw Error(`Boom!`);
}
}
我错过了什么或者我怎样才能做到这一点?我想我可以使用windows.location.href
,但这会重新加载我宁愿避免的页面。
答案 0 :(得分:0)
MyErrorHandler 中的注入不正确。
更改
上 app.module.ts 中的{ provide: ErrorHandler, useClass: MyErrorHandler }
{
provide: ExceptionHandler,
useFactory: (router) => {
return new MyErrorHandler(router);
},
deps: [Router]
}
所以现在你已经正确注入了路由器。
答案 1 :(得分:0)
经过一段时间后,我觉得最好的解决方案确实是“重定向”。使用'window.location.href'
应用于错误页面。你永远不知道你最终会遇到什么样的错误。在某些情况下,应用程序可能会完全崩溃。