angular - 返回一个 Observable来自 canActivate 并重定向为 false
问题描述
我的 Angular 应用程序中有一个反应形式。每次表单值更改时,我都会在我的公共服务中的 BehaviorSubject 中存储一个布尔值。
我创建了一个路由守卫,我想根据 BehaviorSubject 的值停止导航,如果是真的我想停止导航。我在下面尝试过这种方法,但它不起作用。也许我没有正确订阅。
零件
onCreateGroupFormValueChange() {
const initialValue = this.createGroupForm.value;
this.createGroupForm.valueChanges.subscribe((value) => {
this.hasUnsavedData = Object.keys(initialValue).some(
(key) => this.createGroupForm.value[key] != initialValue[key]
);
this._helperService.onFormValueChange(this.hasUnsavedData);
});
}
服务
private _unsaveDataSource = new BehaviorSubject<boolean>(false);
public unsavedForm$ = this._unsaveDataSource.asObservable();
onFormValueChange(hasData : boolean){
this._unsaveDataSource.next(hasData);
}
警卫
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
):
| Observable<boolean | UrlTree>
| Promise<boolean | UrlTree>
| boolean
| UrlTree {
return this._helperService.unsavedForm$.pipe(
map(e => {
if(e){
return false
}else{
return true
}
})
)
}
解决方案
我同意 Aluan Haddad 的评论。Angular 的 canDeactive Guard 应该完全符合您的要求。看看:Angular CanDeactivate
推荐阅读
- node.js - 如何使用从 mongoose 模型调用的 find() 从包含多个模型的集合中获取特定模型?
- c# - 我需要将一个文件分成多个文件,在文件中的特定点分开
- php - Unable to set up dialogFlow API
- csv - 如何使用批处理命令将变量甚至文本传递到文本文档中?
- javascript - React navigation sends the user to the initial route, instead of the sign-in route when authentication fails
- r - 根据三个不同列的内容删除重复行
- python - Kill program generated by subprocess with PyQt5
- c# - 在c#中实现数组数据结构
- javascript - WKWebView - 防止用户文本选择触发的自动滚动
- r - 如何在不重复列名的情况下使用 readr::write_excel_csv 附加数据?