Angular:解析失败时显示目标 URL

Tza*_*dia 5 angular2-routing angular

我有一个简单的解析器,用于如下路线/orders/first

resolve(): Promise<Order> {
    return this.orderService.get()
        .then((response) => response.order)
        .catch(error => Promise.reject(error));
}
Run Code Online (Sandbox Code Playgroud)

我还有一个重定向到错误页面的错误处理程序:

this.router.navigate(['/error'], { skipLocationChange: true });
Run Code Online (Sandbox Code Playgroud)

我希望 URL 是/orders/first这样,如果用户刷新他可能能够查看该页面。这也会使后退按钮返回到不正确的页面(上一页)

问题是解析器在路由激活之前运行,因此 URL 不会更改。

有没有办法做到这一点?


编辑:找到这个解决方法:

  1. 监听路由器事件 NavigationStart并将路由保存到变量
  2. 在重定向到错误页面之前设置位置 URL: this.location.go(nextRoute.url);
  3. 重定向skipLocationChange设置为 true

Chr*_*ler 2

我是这样实现的:

resolve(
  route: ActivatedRouteSnapshot,
  state: RouterStateSnapshot
): Observable<any>|Promise<any>|any {
  return this.clientService.get(route.params.id)
  .catch( err => {
    const path = this.location.path();
    this.router.navigate(["/" + err.status], {  skipLocationChange: true })
    .then( () => {
      this.location.replaceState(path);
    });

    return Observable.empty();
  })
}
Run Code Online (Sandbox Code Playgroud)