CanDeactivate Guard中的Angular 2 Router 3.0未来路由

时间:2016-12-15 17:29:28

标签: angular angular2-routing

我为Angular应用程序编写了一个CanDeactivate后卫非常基本:

@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
    canDeactivate(component: CanComponentDeactivate): Promise<boolean> | boolean {
        return component.canDeactivate ? component.canDeactivate() : true;
    }
}

它只是等待一个承诺解析为true / false,或者立即传回true / false。然而,我想要做的是在放置防护装置的组件中检查未来路线。例如,让我们说我有三条路线,/list/shop/checkout,我将canDeactivate守卫放在/shop上。我想要它,因为如果他们离开那个组件,我想问他们是否确定他们想要离开。但如果他们要离开去结账,我不想问他们是否确定。我会立即回复canDeactivate后卫。但是,如果他们回到/list,我可能会问他们是否确定要将商品留在购物车中。

我已经查询了几个问题,包括this one,并仔细阅读了Angular site上的文档但未找到我正在寻找的内容。

我的想法是,在实际组件中,在canDeactivate方法中,我将能够检查路由器或未来的路线或类似的东西,看看它是什么,看看我是否想要立刻从守卫那里回来。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:0)

CanDeactivate界面中有一个神奇的,神秘的可选参数,可以准确地为您提供所需的参数... nextState

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

SRC :: https://angular.io/api/router/CanDeactivate