我正在尝试创建一个CanDeactivate防护,以提示"保存更改"导航离开路线时的用户。我想排除一些路线(假设当用户切换标签但不选择新项目时)。我一直在努力理解如何在不使用某种导航服务的情况下获取目标网址,并保留完整的URL。这是我的签名可以停用
// This is what handles the deactivate
public canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
所有&#39;路线&#39;并且&#39;州&#39; object包含以前的URL,没有关于目标URL的信息。
我使用
触发另一个组件中的导航this._router.navigate(['/clients', this.selectedClient.id, page]);
答案 0 :(得分:4)
实际上目标状态是CanDeactivate的参数之一。
canDeactivate(
component: CanComponentDeactivate,
route: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean {
return true;
}
答案 1 :(得分:3)
您可以订阅路由器的活动:
NavigationStart
应在CanDeactivate之前触发,因此您可以抓住目的地。
routingDestination: string = "";
constructor(router:Router) {
router
.events
.filter(e:Event => e instanceof NavigationStart)
.subscribe((e: NavigationStart) => this.routingDestination = e.url)
}
}
除此之外,我认为需要知道CanDeactivate
中的目的地是一种设计缺陷。但由于我不了解您的应用,这实际上可能是正确的方式。