我正在开发angular2 fire身份验证,我已经设法以一种方式使身份验证工作,但我希望通过创建自己的自定义Observable以不同的方式执行它,但我无法做到这一点。
我登录了服务
constructor(private af: AngularFire) {}
signIn() {
this.af.auth.login({
provider: AuthProviders.Google,
method: AuthMethods.Popup
})
return this.af.auth; // returns an observable which is consumed in an effect
}
使用此服务代码的效果:
constructor(private actions$: Actions, private authService: UserAuthService) {}
@Effect()
login$: Observable<Action> = this.actions$
.ofType(UserAuthActions.ActionTypes.LOGIN)
.switchMap(() => this.authService.signIn()) // <= switchMap takes the observable
// and takes care of subscribing to the observable
.filter(data => data !== null)
.map((data) => {
return {
type: UserAuthActions.ActionTypes.LOGIN_SUCCESS,
payload: {user: this.authService.getUserProfile(data)}
}
});
直到现在一切都很好,但我想如果我不想公开angularfire.auth observable,我想要公开我的自定义observable user$ = Observable.of(this.user)
,它包裹着一个用户对象,
可以通过订阅服务本身中的angularfire.auth observable来获取此用户对象。之后我可以更改observable user$
的值,因为我公开了这个observable,switchMap
中的Effect
可以捕获它。
user: any = null;
user$: Observable<any>;
constructor(private af: AngularFire) {
// Initializing the Observable
this.user$ = Observable.of(this.user);
this.af.auth.subscribe(
// change the value of user property
data => this.user = data // this should change the value of observable
)
}
signIn() {
this.af.auth.login({
provider: AuthProviders.Google,
method: AuthMethods.Popup
})
return this.user$;
}
但是这样做我可以在switchMap中捕获一次值,这就是构造函数运行的时候。
由于构造函数中的singIn()
块运行并且更改了subscribe
的值,我希望在调用this.user
时也会更改它。
出于某种原因,user
中user$
的值没有改变,尽管理想情况应该如此。
我想我在这里遗漏了一些关于Observables的内容,任何人都可以帮助我实现它。在此先感谢!!!