繁体   English   中英

返回一个 Observable<boolean> 来自 canActivate 并重定向为 false</boolean>

[英]Returning an Observable<boolean> from canActivate and redirect on false

我的 Angular 应用程序中有一个反应形式。 每次更改表单值时,我都会将 Boolean 存储在我常用服务的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM