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

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

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

【问题讨论】:

    标签: angular typescript redux rxjs ngrx


    【解决方案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 运算符的使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多