繁体   English   中英

Angular - 使用 Injector for Router in Service

[英]Angular - Use Injector for Router in Service

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

所以,我确实在我的服务类的构造函数中使用依赖注入获取了 Injector 对象:

Import { ErrorHandler, Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';
 
@Injectable({
    providedIn: 'root'
})

export class RequestErrorHandlerService implements ErrorHandler {
 
    private _router: any

    constructor(
        private injector: Injector
    ) {}

    handleError(error) {

        const router = this.injector.get(Router);
        ...
        router.navigate(['/login']);   
    }
}

我尝试使用 injector.get() 来获取 Router 对象。 但我得到的只是一个错误

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

所以,我想我忘记了一些事情。 但没有得到问题。 为什么这不起作用?

有没有人给我一个提示,或者一个真正适用于 Angular 8 或更高版本的教程的链接?

谢谢。

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

检查您是否在应用模块提供程序中提到了ErrorHandler ,如下所示:

{
   provide: ErrorHandler,
   useClass: RequestErrorHandlerService
}

不是像下面(此前,在应用模块供应商,当我提到的ErrorHandler如下面给出的,它并没有对我的工作)

{
   provide: ErrorHandler,
   useClass: RequestErrorHandlerService,
   deps: [APP_INITIALIZER]
}

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

app-error-handler.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']);
    }
}

app.module.ts

@NgModule({
  // ...
  providers: [
    {
      provide: ErrorHandler,
      useClass: AppErrorHandler
    }
  // ...
  ],
})
export class AppModule { }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM