angular - 角度路由保护/解析器 - 类型'Observable' 不可分配给类型 'Observable'
问题描述
我正在使用路由保护器(或解析器,我尝试使用其中任何一个但得到相同的错误),我想在其中获取 Observable 作为返回值:
canActivate(): Observable<boolean> {
return this.store.pipe(
select(fromUserProfileState.getUserProfiles),
tap((loaded: UserProfile[]) => {
if (!loaded || loaded.length == 0) {
this.store.dispatch(new fromUserProfileActions.LoadUPs());
} else {
return of(true);
}
}),
filter((loaded: UserProfile[]) => loaded.length > 0),
first()
);
}
但是,这不会返回 Observable,它会返回 Observable,这是不可接受的。如何调整 rxjs (v 6.5.5) 运算符以仅返回 Observable?
解决方案
试试这个:
canActivate(): Observable<boolean> {
return this.store.pipe(
select(fromUserProfileState.getUserProfiles),
// Convert the information from UserProfiles to a boolean
// Thils will also be used to authorize the navigation
map((loaded: UserProfile[]) => !!(loaded && loaded.length)),
// dispatch an action is no user profile has been loaded
tap((isLoaded: Boolean) => {
if (!isLoaded) {
this.store.dispatch(new fromUserProfileActions.LoadUPs());
}
}),
// complete the observable
take(1)
);
}
推荐阅读
- windows - 如何在 Windows 10 下使用 hmatrix 正确构建 cabal 项目?
- json - python:将json文件解析为字典列表
- typescript - ESLint,带有 --debug 不打印任何日志
- postgresql - 在 API 中使用 TypeORM 返回自动生成的 Id
- python - 尝试求解作为 omega 函数的矩阵;有兴趣找到欧米茄值
- reactjs - 如何在表格中附加第二张excel表
- odk - 合并引用以创建新的引用,例如 ${var${randnum}}
- docker - 为什么 docker 需要构建之前的所有阶段?
- raku - 在具有 ARM 处理器架构的 Android 上安装 Rakudo
- cypress - 赛普拉斯:动态测试:验证表中的行