我正在使用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/

10-16 19:42