【发布时间】:2016-06-17 10:46:30
【问题描述】:
我正在使用 Angular 2 RC2。我需要将 Angular 2 路由器注入到我的自定义 ExceptionHandler 类中。但是我收到以下错误
错误:错误:无法解析“ErrorHandler”(?)的所有参数。 确保所有参数都用 Inject 修饰或具有 有效的类型注释,并且“ErrorHandler”用 可注射。
我确实尝试装饰私有路由器:使用@Inject 的路由器无济于事。我使用的是打字稿,因此我认为这里不需要@Inject 属性。
我的自定义 ExceptionHandler 看起来像这样
import { ExceptionHandler } from '@angular/core';
import { Router } from '@angular/router';
export class ErrorHandler extends ExceptionHandler{
constructor(
private router: Router
){
super(null, null);
}
call(error, stackTrace = null, reason = null) {
console.log(error);
this.router.navigate(['/error']);
}
}
我的 main.ts 是这样的
import { bootstrap } from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
import { provide, ExceptionHandler } from '@angular/core';
import { ErrorHandler } from './error-handler/error-handler';
import { HTTP_PROVIDERS } from '@angular/http';
import { ROUTER_PROVIDERS } from '@angular/router';
bootstrap(AppComponent, [
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
provide(ExceptionHandler, {useClass: ErrorHandler})
]);
为什么会出现此错误? ExceptionHandler实例化时Router不是可注入的吗?
这里有完整的源代码
https://github.com/harindaka/angular2-seed-typescript/tree/b368315ce6608085f3154a03bc53f0404ce16495
【问题讨论】:
-
即使它没有给出错误。我认为在 angular 引发异常后它不会工作(导航)。所有角度功能都会停止。
-
@A_Singh 这是有道理的。那么在代码中出现未处理错误的情况下,使用上下文错误信息重定向到自定义错误页面的正确方法是什么?
-
我只是显示一个带有消息的自定义警报框,然后选择重新加载应用程序,或者留下。
-
@A_Singh 嗯,我认为在这种情况下重新加载整个应用程序更有意义