【发布时间】:2018-08-03 02:20:27
【问题描述】:
我正在使用 Angular 5 广告为组件实现了 CanDeactivateGuard,以便在有一些未保存的更改时弹出模式:
export interface CanComponentDeactivate {
canDeactivate: (nextStateUrl: string) => Observable<boolean> | boolean;
}
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(
component: CanComponentDeactivate,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return component && component.canDeactivate
? component.canDeactivate(nextState.url)
: true;
}
}
我已将此保护添加到 page2,如果我从第 1 页导航到第 2 页并进行一些更改并尝试导航离开,它会完美运行。 但是,如果我停留在 page2 并刷新页面然后进行一些更改,并尝试导航离开,则会调用守卫中的 canDeactivate 方法,但组件值为 null,因此返回 true 而不显示确认模式。或者,如果我从 page2 导航到另一个尚未加载的页面。请注意,所有页面都是延迟加载的,并且每个页面都有其路由模块。
我以与此处相同的方式将保护添加到 page2 模块: http://plnkr.co/edit/z2OqgTXTiPpTgXcmNiDM?p=preview
我也尝试将守卫添加到主守卫,但也没有用。
刷新组件时是否有任何原因为null,但是当我从其他页面导航到第2页时,该组件不在防护中。
这里有什么解决办法吗?
谢谢
【问题讨论】: