私はすべて例外をログに記録するのに使用するErrorHandler
を持っています。&その後、一般的なエラーページにリダイレクトします。問題は、処理された例外がlifecycle hooks(またはコンストラクタ)の外部で発生した場合にのみ機能するということです。方法。 ngOnInit
の例を考えてみます。ライフサイクルフックの間にエラーが発生した場合、router.navigateは機能しません
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
を使うことができると思うが、それはむしろ避けるだろう何かであるページをリロードするだろう。 MyErrorHandlerで
私は同じ問題を抱えていますが、constuctor(){}でエラーをスローすると、予想どおりにナビゲートします。 – jonas