Angular路由守卫 canDeactivate
目的
离开页面时,做出逻辑判断
以ng-alain的项目为基础做演示
效果如图:
关键代码
定义一个CanDeactivateGuardService
export class CanDeactivateGuardService implements CanDeactivate<CanDeactivateComponent> {
canDeactivate(component: CanDeactivateComponent,
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean {
return component.leaveTip();
}
}
在component中完成leaveTip方法
leaveTip() {
return Observable.create((observer) => {
if(!this.isSave){
this.modalService.confirm({
nzTitle: '页面离开提示',
nzContent: '数据尚未保存,是否离开该页面?',
nzOnOk: async () => {
observer.next(true);
},
nzOnCancel: () => {
observer.next(false);
}
});
}
else{
observer.next(true);
}
});
}
设置ng-alain的ReuseTabMatchMode,排除can-deactivate这个目标路由
this.reuseTabService.mode = ReuseTabMatchMode.URL;
const excludes = new Array<RegExp>();
excludes.push(new RegExp('/can-deactivate'));
this.reuseTabService.excludes = excludes;
示例代码
参考资料
feat(abc: reuse-tab): new reuse-tab component plans!
拓展阅读
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的【推荐】按钮。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。