Angular 使用中路由器的角用注入器

Angular 使用中路由器的角用注入器,angular,router,Angular,Router,我试图实现一个错误服务,它需要在这个类中使用Angular Router方法。我所能找到的就是使用Angular的Injector方法将Router类插入到我的服务中 因此,我在serice类的构造函数中使用依赖项注入获取Injector对象: 从'@angular/core'导入{ErrorHandler,Injectable,Injector}; 从'@angular/Router'导入{Router}; @注射的({ providedIn:'根' }) 导出类RequestErrorHan

我试图实现一个错误服务,它需要在这个类中使用Angular Router方法。我所能找到的就是使用Angular的Injector方法将Router类插入到我的服务中

因此,我在serice类的构造函数中使用依赖项注入获取Injector对象:

从'@angular/core'导入{ErrorHandler,Injectable,Injector};
从'@angular/Router'导入{Router};
@注射的({
providedIn:'根'
})
导出类RequestErrorHandlerService实现ErrorHandler{
专用路由器:任何
建造师(
专用注射器:注射器
) {}
handleError(错误){
const router=this.injector.get(路由器);
...
router.navigate(['/login']);
}
}
我尝试使用injector.get()获取路由器对象。但我得到的只是一个错误

未捕获类型错误:this.injector.get不是函数

所以,我想我忘了什么。但我没有发现问题。为什么这不起作用

是否有人给我一个提示,或者一个链接到一个教程,它真的适用于Angular版本8或更高版本


谢谢。

您应该能够通过构造函数简单地注入路由器:

export class RequestErrorHandlerService implements ErrorHandler {
    constructor(
        private router: Router
    ) {}

    handleError(error) {
        this.router.navigate(['/login']);   
    }
}

为什么不就这样

import { Router } from '@angular/router';

constructor(private router: router) {}

handleError(error) {
  this.router.navigate(['/login']);   
}

最近遇到了同样的问题,并且有您提到的类似代码

检查您是否提到了应用程序模块内的
错误处理程序
,如下所示:

{
   provide: ErrorHandler,
   useClass: RequestErrorHandlerService
}
如下所示(之前,在应用程序模块提供程序中,当我提到下面给出的ErrorHandler时,它对我不起作用)


无论如何,下面是一些对我有用的代码片段,可能会很有用

应用程序错误处理程序.ts

@Injectable()
export class AppErrorHandler implements ErrorHandler {

    constructor(private injector: Injector) {}

    handleError(error: Error) {
        console.log('Client side - ' + error.message);
        const router = this.injector.get(Router);
        router.navigate(['login']);
    }
}
@NgModule({
  // ...
  providers: [
    {
      provide: ErrorHandler,
      useClass: AppErrorHandler
    }
  // ...
  ],
})
export class AppModule { }
app.module.ts

@Injectable()
export class AppErrorHandler implements ErrorHandler {

    constructor(private injector: Injector) {}

    handleError(error: Error) {
        console.log('Client side - ' + error.message);
        const router = this.injector.get(Router);
        router.navigate(['login']);
    }
}
@NgModule({
  // ...
  providers: [
    {
      provide: ErrorHandler,
      useClass: AppErrorHandler
    }
  // ...
  ],
})
export class AppModule { }

我也是这么想的。但是我得到了一个错误:this.router.navigate不是一个函数您是否在AppModule(或至少ComponentModule)中导入了RouterModule?