我为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
方法中,我将能够检查路由器或未来的路线或类似的东西,看看它是什么,看看我是否想要立刻从守卫那里回来。
有关于此的任何想法吗?
答案 0 :(得分:0)
CanDeactivate界面中有一个神奇的,神秘的可选参数,可以准确地为您提供所需的参数... nextState
interface CanDeactivate<T> {
canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot):
Observable<boolean>|Promise<boolean>|boolean
}