Angularjs 全局异常处理程序中的角度2重定向
我正在尝试实现一个ExceptionHandler,它将用户重定向到错误页面 为此,我需要注入一个路由器对象,如下所示:Angularjs 全局异常处理程序中的角度2重定向,angularjs,Angularjs,我正在尝试实现一个ExceptionHandler,它将用户重定向到错误页面 为此,我需要注入一个路由器对象,如下所示: @Injectable() class RedirectExceptionHandler extends ExceptionHandler { constructor(private router: Router) { super(null, null); } call(error: any, stackTrace: any = null, reaso
@Injectable()
class RedirectExceptionHandler extends ExceptionHandler {
constructor(private router: Router) {
super(null, null);
}
call(error: any, stackTrace: any = null, reason: any = null) {
// ...log and redirect to error page
}
}
但是,当我运行此代码时,会出现一个异常:
(index):87 Error: EXCEPTION: Error during instantiation of ApplicationRef_! (ApplicationRef -> ApplicationRef_).
ORIGINAL EXCEPTION: Cannot instantiate cyclic dependency! (ExceptionHandler -> Router -> ApplicationRef)
ORIGINAL STACKTRACE:
Error: DI Exception
at CyclicDependencyError.BaseException [as constructor] (http://localhost:1080/node_modules/@angular/core/src/facade/exceptions.js:17:23)
at CyclicDependencyError.AbstractProviderError[as constructor] (http://localhost:1080/node_modules/@angular/core/src/di/reflective_exceptions.js:39:16)
at new CyclicDependencyError(http://localhost:1080/node_modules/@angular/core/src/di/reflective_exceptions.js:102:16)
at ReflectiveInjector_._new (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:613:19)
at ReflectiveInjectorDynamicStrategy.getObjByKeyId (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:270:50)
at ReflectiveInjector_._getByKeyDefault (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:795:38)
at ReflectiveInjector_._getByKey (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:767:25)
at ReflectiveInjector_._getByReflectiveDependency (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:757:21)
at ReflectiveInjector_._instantiate (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:654:36)
at ReflectiveInjector_._instantiateProvider (http://localhost:1080/node_modules/@angular/core/src/di/reflective_injector.js:626:25)
Evaluating http://localhost:1080/app/main.js
Error loading http://localhost:1080/app/main.js
有解决办法吗?是否可以改为在调用方法中实例化路由器,从而避免对象创建期间的循环依赖关系?在错误处理程序组件实例化后,注入Angular的注入器并在稍后阶段获取路由器实例:
constructor(private injector:Injector) {
super(null);
}
ngOnInit() {
this.router = this.injector.get(Router);
}
因此,稍后您可以使用路由器实例:
call(exception:any, stackTrace?:any, reason?:string):void {
this.router.navigate(...);
}
注入Angular的注入器,并在错误处理程序组件实例化后的稍后阶段获取路由器实例:
constructor(private injector:Injector) {
super(null);
}
ngOnInit() {
this.router = this.injector.get(Router);
}
因此,稍后您可以使用路由器实例:
call(exception:any, stackTrace?:any, reason?:string):void {
this.router.navigate(...);
}