如何使用Angular在Firebase中使用WHERE函数?
实际目标:如何使用Angular在Firebase中使用WHERE函数?,angular,typescript,firebase,ionic-framework,google-cloud-firestore,Angular,Typescript,Firebase,Ionic Framework,Google Cloud Firestore,实际目标: 用户可以在组织组中发布,在该组织组中发布的帖子在其他组织组中不得可见,因此我尝试使用Firebase中的WHERE函数来过滤帖子列表 用户制作的每篇文章将在Firestore中保存组织组ID(创建文章的位置)。因此,当我过滤帖子列表时,我可以使用组织组ID(postOrgId)来过滤每个组织组中的特定帖子 我想我在让用户使用激活的路由查看组织ID时遇到了问题 图1:组织ID 我尝试以下方法 我尝试使用激活路由,因为它将保存用户查看的当前组织组ID,但不幸的是Firebase抛出了一
出口类邮政服务{
邮政编码:AngularFirestoreCollection;
博士后:AngularFirestoreDocument;
职位:可观察;
岗位:可观察;
邮政$:任何;
原形:可见;
建造师(
私人afs:AngularFirestore
) {
this.postCol=this.afs.collection('post',ref=>ref.orderBy(“createdAt”,“desc”));
//组织组ID将在此处传递给WHERE子句
this.postCol=this.afs.collection('post',ref=>ref.where('postOrgId',“==”,this.orgId));
this.posts=this.postCol.snapshotChanges().pipe(
映射(操作=>{
returnaction.map(a=>{
const data=a.payload.doc.data()作为Post;
data.postId=a.payload.doc.id;
返回数据;
})
})
);
}//
//发帖
getPosts(){
把这封信寄回去;
}
//它将获得组织ID
getOrgId(idParameter):可观察{
返回this.orgId=this.afs.collection('post',result=>result.where('postOrgId','=',idParameter)).valueChanges();
}
当我使用Angular和Firebase时,我会这样做:
constructor(private afs: AngularFirestore){}
someFunction(idParameter): Observable<any>{
return this.afs.collection('Collection', result => result.where('fieldThatContainsTheId', '==', idParameter)).valueCahnges();
}
构造函数(专用afs:AngularFirestore){}
someFunction(idParameter):可观察{
返回此.afs.collection('collection',result=>result.where('fieldthatcontainstId','=',idParameter)).valueCahnges();
}
您能否确保this.orgID
已在我的post service中定义/此.orgID未被读取,因此我想我在获取用户查看的当前组织ID时遇到了问题。我可以将此放置在哪里,先生,放置在我的post service中?是的,将其放置在您的post service中并从您的组件调用。这是我在检索文档时的方式rom Firestore collections。我尝试了您所说的,先生,但不幸的是,错误仍然存在。我将发布更新的代码。
export class PostService {
postCol: AngularFirestoreCollection<Post>;
postDoc: AngularFirestoreDocument<Post>;
posts: Observable<Post[]>;
post: Observable<Post>;
post$: any;
orgId: Observable<any>;
constructor(
private afs: AngularFirestore
) {
this.postCol = this.afs.collection('post', ref => ref.orderBy("createdAt", "desc"));
//Organization Group ID will be passed here to the WHERE Clause
this.postCol = this.afs.collection('post', ref => ref.where("postOrgId", "==", this.orgId));
this.posts = this.postCol.snapshotChanges().pipe(
map(action => {
return action.map(a => {
const data = a.payload.doc.data() as Post;
data.postId = a.payload.doc.id;
return data;
})
})
);
}//
//Gets all post
getPosts() {
return this.posts;
}
//It will get the Organization ID
getOrgId(idParameter): Observable<any>{
return this.orgId = this.afs.collection('post', result => result.where('postOrgId', '==', idParameter)).valueChanges();
}
constructor(private afs: AngularFirestore){}
someFunction(idParameter): Observable<any>{
return this.afs.collection('Collection', result => result.where('fieldThatContainsTheId', '==', idParameter)).valueCahnges();
}