代码之家  ›  专栏  ›  技术社区  ›  Diego Venâncio

转换angularfirestorecollection<t>或observate中的collectionreference?

  •  0
  • Diego Venâncio  · 技术社区  · 7 年前

    我的 method 正在返回 CollectionReference 是的。 但是,此方法用于返回 AngularFirestoreCollection<myObj> 在我把它转换成 Observable<myObj[]> 使用数组。

    humanCol : AngularFirestoreCollection<Human>;
    humanObersArray: Observable<Human[]>;
    
    constructor(private db: AngularFirestore) { }
    

    在我用这种方法之前。努力获取所有数据。

    buildHuman(): Observable<Human[]> {
       this.humanCol = this.db.collection('path');
       return this.humanObersArray = this.humanCol.valueChanges();
    } 
    

    现在,我使用have可选参数。

    buildHuman(param1: string, param2?: string, param3?: string...){ 
      this.db.collection('path', ref => {
      let retVal = ref as any;
      if (param1 != null) { retVal = retVal.where('param1', '==', param1) }
      if (param2 != null) { retVal = retVal.where('param2', '==', param2) }
      if (param3 != null) { retVal = retVal.where('param3', '==', param3) }
      ...
      return retVal; //this return a CollectionReference 
      });
    }
    

    我怎样才能转变 retVal AngularFirestoreCollection<T> Observable 是吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tim Martens    7 年前

    你的职能 buildHuman 不退还任何东西。把它还给我 this.db.collection 打电话给你就会得到 AngularFirestoreCollection 是的。或添加呼叫 valueChanges 就像以前一样 observable 以下内容:

    buildHuman(param1: string, param2?: string, param3?: string): AngularFirestoreCollection<any> {
        return this.afs.collection('users', ref => {
            let retVal = ref as any;
            if (param1 != null) { retVal = retVal.where('param1', '==', param1); }
            if (param2 != null) { retVal = retVal.where('param2', '==', param2); }
            if (param3 != null) { retVal = retVal.where('param3', '==', param2); }
            return retVal;
        });
    }
    

    或者

    buildHuman(param1: string, param2?: string, param3?: string): Observable<any> {
        return this.afs.collection('users', ref => {
            let retVal = ref as any;
            if (param1 != null) { retVal = retVal.where('param1', '==', param1); }
            if (param2 != null) { retVal = retVal.where('param2', '==', param2); }
            if (param3 != null) { retVal = retVal.where('param3', '==', param2); }
            return retVal;
        })
        .valueChanges();
    }