angular - 如何在 Angular 6 中的解析器服务中使用路由器导航?

标签 angular error-handling router resolver

我正在使用以下 ErrorHandleService每次任何服务发生错误时都会调用它。

handleError<T> (operation = 'operation', result?: T) {
return (error: any): Observable<T> => {

  const errorBody = error.json();

  const userMessage = this.getUserMessage(errorBody.error);
  if (error.status === 403 || error.status === 404) {
    this.router.navigate(['error']);
  } else {
    if (userMessage === 'Es ist leider ein Fehler aufgetreten, bitte versuchen Sie es erneut') {
      this.logError(operation, errorBody.error).subscribe();
      console.log('An error has occured: ' + operation + ' (' + error.status + ')');
    }
    return throwError(userMessage);
  }
};

对于某些组件,我已经实现了解析器。 问题是:

如果在使用解析器访问路由时发生 HTTP 错误(403 或 404),this.router.navigate['error']不起作用(只显示空白页面)。否则 - 没有解析器 - 一切正常,如果 403,用户将被转发到错误组件。或 404发生错误。

谁能帮我解决这个问题?

编辑:

我的解析器看起来像这样:
@Injectable()
export class GetStaffsResolver implements Resolve<Array<Staff>> {

  constructor(private ss: StaffService) { }

  resolve(activatedRoute: ActivatedRouteSnapshot) {
    return this.ss.getStaffs(activatedRoute.queryParams['branch']);
  }
}

最佳答案

Router.navigate是一个方法,而不是一个数组。尝试调用它

this.router.navigateByUrl('error');

而不是 this.router.navigate['error'] .

关于angular - 如何在 Angular 6 中的解析器服务中使用路由器导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52054418/

相关文章:

javascript - react native router flux 遇到两个 child 用同一个key

javascript - 为什么我没有被重定向到我选择的路径? react 路由器

angular - 为什么 Angular2 组件属性没有显示在我的页面中?

Angular2 authguards 执行异步函数失败

angular - 适用于 Ionic 2/3 移动浏览器的 AOT(提前编译)

c++ - 如何读取 char argv 输入并解析(检查)它的非整数

python - 我收到了 “nonetype”错误,但我不知道为什么

javascript - 从其他组件访问激活的路由数据

c# - WPF 应用程序在某些机器上不起作用 : Stopped working error

node.js - 使用 Superagent 和 Express 4 接收 POST 请求数据