如何确定调用router.navigate后的新路由?

时间:2018-04-11 21:06:33

标签: javascript angular angular-ui-router observable

我试图通过路由器防护拦截路由更改。所以当我打电话时:

this.router.navigate([“myApp/userProfiles”]);

所以一旦调用它就会通过Guard CanDeactivate接口。守卫需要确定它真正要重定向的位置。 那么有一个属性如下:

this.router.newRoute ?? 

或者我应该在调用导航方法之前使用全局变量来设置它吗?

1 个答案:

答案 0 :(得分:0)

正如您在CanDeactivate界面中看到的,第四个参数是nextState。您可以检查它以找到下一条路线的网址。

interface CanDeactivate<T> { 
  canDeactivate(
    component: T, 
    currentRoute: ActivatedRouteSnapshot, 
    currentState: RouterStateSnapshot, 
    nextState?: RouterStateSnapshot
  ): Observable<boolean> | Promise<boolean> | boolean
}

所以在你的情况下你可以这样做:

canDeactivate(
  component: TeamComponent,
  currentRoute: ActivatedRouteSnapshot,
  currentState: RouterStateSnapshot,
  nextState: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean {

  if (nextState.url === '/interesting/path/') {
    // do something
  else {
    return true;
  }

}