【发布时间】:2018-12-03 22:56:25
【问题描述】:
问题:如果 firebase-auth 没有用户登录,我需要路由到登录页面;如果有用户登录,我需要路由到备用页面。
为了实现这一点,它将调用构造函数服务中的一个函数。
private isLoginRequired() {
// Firebase auth service observable
let authSub = this.afAuth.authState;
// Current route service observable
let routeSub = this.activatedRoute.url;
//Alternate App Page
//this.router.navigate(["tool/event-management/events"]);
//Login Page
//this.router.navigate(["tool/event-management/login"]);
}
现在,我需要以这样的方式组合这些 observables,如果其中任何一个的值发生变化,我可以通过单个订阅收集两个 observables 的当前值。
something.subscribe(observableSnapshots => {
let snapshot_auth = observableSnapshots[0];
let snapshot_route = observableSnapshots[1];
if(condition<snapshot_route, snapshot_auth>){
// do anything positive
}
else{
// do anything negative
}
});
我知道这可以通过嵌套订阅来实现,但这肯定不是一种有效的方法。
我也尝试过mergeMap但无法达到要求,这里是sn-p(不起作用)
routeSub
.pipe(mergeMap(event1 => authSub.pipe(map(event2 => "test"))))
.subscribe(result => {
console.log(result);
});
请告诉我一个更好的出路。提前致谢。
依赖:“rxjs”:“~6.3.3”
【问题讨论】:
-
你不应该订阅你的内心,而应该订阅你的外在..
-
@MikeOne 我试过交换它们并没有多大帮助。
-
您是否研究过 Angular 中的路由器防护?他们可以在用户登陆页面之前处理身份验证逻辑。
-
@sketchthat,如果用户已经在页面上,并且从第二个选项卡触发了锁定该页面的事件(例如注销)怎么办?
-
这是一篇文章,展示了在 Angular 中合并可观察对象的方法的可视化。它值得一看。 Learn to combine RxJs sequences with super intuitive interactive diagrams