【发布时间】:2017-02-17 13:03:05
【问题描述】:
当我在订阅者中获得某个值时,我试图返回一个 observable,但我失败了。
这是代码:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> {
// get route to be activated
this.routeToActivate = route.routeConfig.path;
// get user access levels
return this._firebase.isUserAdmin <-- returns Subscription, not Observable
.map(user => user.access_level)
.subscribe( access => {
// I need to return an observable here
});
}
关于 Angular 2 中的 observables 的资源并不多,所以我不知道从哪里开始。请问有人可以帮忙吗?
更新 -> 工作版本
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> {
// get route to be activated
this.routeToActivate = route.routeConfig.path;
// get user access levels
return this._firebase.isUserAdmin
.map(user => {
let accessLevel = user.access_level;
if (accessLevel === 'admin' ) {
return true;
}
}).first();
}
【问题讨论】:
-
你应该在 rxjs 而不是 ng2 中搜索 Observables。有大量的资源
-
谢谢!我试过了,但它们的格式与 Angular 2 使用的格式不同。我想我必须从头开始学习。
-
你能进一步解释这段代码的上下文吗?由于
subscribe返回Subscription对象以取消订阅,因此不可链接,通常你想做observable.subscribe(...); return observable。 -
Angular 使用 rxjs5。许多资源都是关于 rxjs4 的。我想这就是你所说的“不要采用相同的格式”(github.com/ReactiveX/rxjs == V5 vs github.com/Reactive-Extensions/RxJS == V4)
标签: angular typescript rxjs observable