我正在使用Angular 2 RC2。我需要将Angular 2 Router注入(inject)我的自定义ExceptionHandler类中。但是我收到以下错误
我曾尝试装饰专用路由器:使用@Inject的路由器无济于事。我正在使用 typescript ,因此我认为这里不需要@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不可注入(inject)吗?
完整的源代码在这里
https://github.com/harindaka/angular2-seed-typescript/tree/b368315ce6608085f3154a03bc53f0404ce16495
最佳答案
请参阅:ErrorHandler类。您也可以添加Injectable
装饰器来实现DI!
import { ErrorHandler, Injectable } from '@angular/core';
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
private myService: MyService;
constructor(private injector: Injector) {
this.myService = injector.get(MyService);
}
handleError(error) {
alert('Bad things happening');
}
}
@NgModule({
providers: [
{
provide: ErrorHandler,
useClass: GlobalErrorHandler
}
]
})
export class AppModule { }
注意:上面的答案使用了
ExceptionHandler
,它在最终发行版中被删除,而使用了ErrorHandler
。关于angular - Angular 2 RC 2如何将路由器注入(inject)自定义ExceptionHandler,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37879654/