我讨厌在下面实现全局的ErrorHandler:
@Injectable()
export class MyErrorHandler implements ErrorHandler {
handleError(error:any): void {
if (error instanceof HttpErrorResponse && error.status === 401) {
const injector = Injector.create({providers: [{provide: Router, deps :[]}]});
injector.get(Router).navigateByUrl('/login');
}
}
}
当我收到401响应时,出现TypeError:StaticInjectorError [RouterModule-> Router]:无法读取未定义的属性“ get”。
答案 0 :(得分:0)
为什么要创建自己的injector
?
添加injector
作为构造函数参数,并使用它:
@Injectable()
export class MyErrorHandler implements ErrorHandler {
constructor(private readonly injector: Injector) {}
handleError(error:any): void {
if (error instanceof HttpErrorResponse && error.status === 401) {
this.injector.get(Router).navigateByUrl('/login');
}
}
}
答案 1 :(得分:0)
我不知道尝试以这种方式注入路由器背后是否有原因。 但是如果它适合您,您可以这样做。 将路由器添加到构造函数中,并在获得401
时使用它进行导航 @Injectable()
export class MyErrorHandler implements ErrorHandler {
constructor(private _router:Router){}
handleError(error:any): void {
if (error instanceof HttpErrorResponse && error.status === 401) {
this._router.navigate(['/login']);
}
}