在全局错误处理程序中注入路由器:Angular 5

时间:2018-03-07 15:23:53

标签: angular typescript

我在Angular 5中有一个场景,我需要根据每个类中定义的错误处理程序重定向页面。 这些是我的错误类。

export class AppError {
  constructor(
    public originalError?: any,
    executeParent?: boolean
  ) {
    if (executeParent) {
      console.log(originalError);
    }
  }
}

export class NotFoundError extends AppError {
  constructor(originalError) {
    super(originalError);
    console.log(this);
  }
}

我在这样的服务中使用它们:

@Injectable()
export class AccountService {
  account: Account;
  constructor(private http: HttpClient) {}

  fetch () {
    return this.http.get(ENDPOINT.ACCOUNT).catch((error: Response) => {
      if (error.status === 404) {
        return Observable.throw(new NotFoundError(error));
      }
      return Observable.throw(new AppError(error));
    });
  }
}

现在我需要做这样的事情

export class AppError {
  private router: Router;
  private store: StoreService;

  constructor(
    public originalError?: any,
    executeParent?: boolean
  ) {
    if (executeParent) {
      if (this.store.errorMessage.getValue().code) {
        log.print('ErrorCode: ', this.store.errorMessage.getValue().code);
        this.router.navigate(['/errorPage']);
      }
      console.log(originalError);
    }
  }
}

但它没有让我,因为路由器和商店没有定义。我无法定义新实例,因为我需要对商店的引用。

我不想在构造函数中使用它,因为我必须从这么多较低级别传递此值。我想保持我的班级签名简单直接。因为我需要在这里添加更多类型的错误,我无法在如此长的层次结构中传递存储和路由器。

0 个答案:

没有答案