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