我有一个路由守卫(canactivate
),我需要访问我的应用程序当前状态以验证数据,以防止用户进行无效的导航。如何获取当前状态?
我只是尝试使用商店中的订阅来获取状态,但是除非状态被更改,否则它不会获取数据!
您可以这样做。因为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);
}));
}
}
}