导航到错误处理程序中的url

时间:2019-07-03 05:15:29

标签: angular

我讨厌在下面实现全局的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”。

2 个答案:

答案 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']);
            }
        }