【发布时间】:2020-03-06 20:07:37
【问题描述】:
我有一个路由守卫 (canActivate),我需要访问我的应用当前状态以验证数据,以防止用户进行无效导航。如何获取当前状态?
我只是尝试在商店中使用订阅获取状态,但除非状态发生更改,否则它不会获取数据!
【问题讨论】:
标签: angular typescript redux rxjs ngrx
我有一个路由守卫 (canActivate),我需要访问我的应用当前状态以验证数据,以防止用户进行无效导航。如何获取当前状态?
我只是尝试在商店中使用订阅获取状态,但除非状态发生更改,否则它不会获取数据!
【问题讨论】:
标签: angular typescript redux rxjs ngrx
你可以这样做。因为 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);
}));
}
}
}
【讨论】:
of 运算符的使用。