NGRX - 如何在 Angular 防护中访问我的应用程序状态?

Posted

技术标签:

【中文标题】NGRX - 如何在 Angular 防护中访问我的应用程序状态?【英文标题】:NGRX - How can I access my app state in angular guard? 【发布时间】:2020-03-06 20:07:37 【问题描述】:

我有一个路由守卫 (canActivate),我需要访问我的应用当前状态以验证数据,以防止用户进行无效导航。如何获取当前状态?

我只是尝试在商店中使用订阅获取状态,但除非状态发生更改,否则它不会获取数据!

【问题讨论】:

【参考方案1】:

你可以这样做。因为 canActivate 期望您返回布尔值,所以您需要将商店数据映射到布尔值

import  of  from 'rxjs';
import  switchMap  from "rxjs/operators";

@Injectable()
export class SomeGuard implements CanActivate 
    constructor(private store: Store<AppState>) 

    loadData(): Observable<any> 
        return this.store.select(state => state.someState);
    

    canActivate(route: ActivatedRouteSnapshot): Observable<boolean> 
        return this.loadData()
            .pipe(switchMap(() => 
                return of(true);
            ));
        
    

【讨论】:

谢谢它的工作。但是您在 rxjs 中的代码已被弃用,可由 rxjs vswitchMap 和of 运算符的使用。

以上是关于NGRX - 如何在 Angular 防护中访问我的应用程序状态?的主要内容,如果未能解决你的问题,请参考以下文章

Angular+ngrx:如何在路由器 url 遍历中保持存储状态?

如何基于 NgRX 存储数据组成 Angular 守卫

在单元测试中使用参数模拟 ngrx 存储选择器(Angular)

在ngrx/effect中访问存储的正确方法

在 Angular 中使用 ngrx 进行状态管理时,控制台记录状态数据

如何通过 Angular 中的 NGRX 减速器使用数组更新状态?