【发布时间】:2019-08-01 18:53:19
【问题描述】:
我有一个身份验证服务和一个角度查询服务。
Auth 服务负责登录并跟踪用户对象(可观察)
import {Injectable} from '@angular/core';
import {AngularFireAuth, AngularFireAuthModule} from '@angular/fire/auth';
import {AngularFirestore, AngularFirestoreModule} from '@angular/fire/firestore';
import {Observable, of} from 'rxjs';
import {User} from '../models/user';
import {switchMap} from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class AuthService {
user: Observable<User>;
constructor(private fireAuth: AngularFireAuth, private fireStore: AngularFirestore) {
this.user = this.fireAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.fireStore.doc<User>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
}
}));
}
}
在我的查询服务中,我想根据登录的用户 ID 获取一些文档。这就是我在查询服务中添加 authService 作为构造函数参数的原因(可能不是最好的方法)。
查询文档的过程如下:
this.data = this
.fireStore
.collection<Blimp>(
'blimps',
ref => ref.where('userIdTo', '==', ??ID_FROM_OBSERVABLE??)
)
.valueChanges()
.pipe(map(collection => {
return collection.map(b => {
let blimp = new Blimp();
blimp.fileLocation = b.fileLocation;
return blimp;
});
}));
如您所见,我很难将 ID 输入该函数,因为我们正在使用 observable。
我的问题是,这里最好的方法是什么?
我正在尝试以下操作,但无法正常工作
this.blimps = this
.fireStore
.collection<Blimp>(
'blimps',
ref => ref.where('userIdTo', '==', this.authService.user.pipe(map((user) => user.userId)))
)
.valueChanges()
.pipe(map(collection => {
return collection.map(b => {
let blimp = new Blimp();
blimp.fileLocation = b.fileLocation;
return blimp;
});
}));
【问题讨论】:
标签: angular firebase rxjs google-cloud-firestore