【发布时间】:2017-04-28 02:39:44
【问题描述】:
我有一个像
这样的未决变更守卫 import {CanDeactivate} from '@angular/router';
export interface ComponentCanDeactivate {
canDeactivate: () => boolean | Observable<boolean>;
}
export class PendingChangesGuard implements CanDeactivate<ComponentCanDeactivate> {
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
// if there are no pending changes, just allow deactivation; else confirm first
return component.canDeactivate() ?
true :
// NOTE: this warning message will only be shown when navigating elsewhere within your angular app;
// when navigating away from your angular app, the browser will show a generic warning message
// see http://stackoverflow.com/a/42207299/7307355
confirm('WARNING: You have unsaved changes. Press Cancel to go back and save these changes, or OK to lose these changes.');
}
}
我的问题是我还有一些与页面路由参数相关联的选项卡控件,因此当导航一个选项卡时,它会更新路由参数,反之亦然。它通过使用新参数导航到当前路由来更新参数,新参数不会重新加载组件,因为它仍然是当前路由。我的问题是我不希望 PendingChangesGuard 将这些路由更改视为停用,因为该组件仍在页面上的不同选项卡中。
理想情况下,我可以将一些参数传递给守卫,告诉它在重新导航到当前路线的情况下要忽略哪些路线参数,然后以某种方式在守卫内检测是否唯一的变化是其中之一被忽略的参数。我不确定如何检测这样的参数变化和想法?
【问题讨论】:
-
您可以访问
canDeactivate中的路由参数,您可以直接使用它来构建您的逻辑`canDeactivate(component: ComponentCanDeactivate, route: ActivatedRouteSnapshot,state: RouterStateSnapshot)。 -
我知道这一点,但是如何查看之前的路线和当前路线并找出哪些参数发生了变化?
标签: angular angular2-routing angular2-router