angular - Angular 6+ Guards - 返回 true/false 到 combineLatest 订阅
问题描述
我怎样才能在里面返回真/假subscribe
?
import {Injectable} from '@angular/core';
import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
import {AppState} from '../../app.state';
import {select, Store} from '@ngrx/store';
import {merge, combineLatest} from 'rxjs';
import {map, take, tap} from 'rxjs/operators';
import {HttpClient} from '@angular/common/http';
@Injectable()
export class PermissionsGuard implements CanActivate {
user;
constructor(
private router: Router,
private store: Store<AppState>
) {
}
canActivate(route: ActivatedRouteSnapshot): any {
const academy$ = this.store.pipe(select(state => state.academy));
const user$ = this.store.pipe(select(state => state.user));
return combineLatest(
academy$,
user$
).pipe(
map((data) => {
console.log(data[0]);
console.log(data[1]);
return data;
})
).subscribe((data) => {
console.log(data);
// return true or false to guard
})
}
}
解决方案
你根本不订阅你的 observable。
您应该始终为下一个链运算符返回一个 Observable,在这种情况下它是守卫的。
删除subscribe((data) => {...})
部分。
如果您必须应用自定义逻辑,请在map
运算符中执行并返回您想要返回的任何内容,即true
或false
推荐阅读
- r - 如何在 r 中创建和打印 wordcloud
- c - 堆栈段 C 数组
- javascript - 按钮 onclick 事件不会触发
- javascript - 如何根据另一个 div jQuery 中的内容显示 div
- javascript - 带有 Vue.js 的 Laravel 5.7
- angular - firebase 身份验证无法从 iPhone 上的 facebook Messenger 工作
- r - R string matching and replace
- javascript - SOCKET.IO 不是向客户端发送新数据,而是向客户端发送旧数据(JavaScript 客户端)
- sockets - 在 Python 2.6.6 上通过代理授权 SSL 连接
- php - 根据ID点击时在网页中显示不同的数据