将 4 个 angularfire2 observables 合并为 1

Combine 4 angularfire2 observables into 1

这是我的新应用。

Angular 火 2 + Firebase

getErros(start, end): FirebaseListObservable<any>{

      this.lista = this.db.list('/erros/geral',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      });

      this.lista2 = this.db.list('/erros/utilsst',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      });

      this.lista3 = this.db.list('/erros/utilfac',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      });

      this.lista4 = this.db.list('/erros/geral',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      });

      this.listafinal = (this.lista && this.lista2 && this.lista3 && this.lista4);

      return this.listafinal;
  }

来自 firebase 的简单数据搜索,但无法正常运行。有什么方法可以执行此操作吗?

无法正常工作。只接收来自 this.lista4

的数据

我建议使用 combineLatest。使用此运算符,您可以将所有四个组合成单个可观察值,如果更改任何一个可观察值,这将生成一个新值

Observable.combineLatest(
  this.db.list('/erros/geral',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilsst',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilfac',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
      this.db.list('/erros/utilatas',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      })

)
.map(([geral, utilsst, utilfac, utilatas]: [any, any, any, any]) =>
  ({ geral, utilsst, utilfac, utilatas }) // Do add operation here.
)

我对代码做了一些修改。

import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';
import { Observable } from 'rxjs/Rx';
import * as Rx from 'rxjs';
@Injectable()
export class ProcurarService {







  constructor(private db: AngularFireDatabase) {
      
   }
  
   hey;
   

  getErros(start, end): FirebaseListObservable<any>{

this.hey = Observable.combineLatest(
  this.db.list('/erros/geral',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilsst',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
  this.db.list('/erros/utilfac',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      }),
      this.db.list('/erros/utilatas',{
          query: {
                  orderByChild: 'titulo',
                  limitToFirst:10,
                  startAt: start,
                  endAt: end
          }
      })

)
.map(([geral, utilsst, utilfac, utilatas]: [any, any, any, any]) => { let erro = [geral, utilsst,utilfac,utilatas]; console.log(erro); return erro;  } )

return this.hey;

  }


}

这种方式可行,

问题是:

它不显示数据,我的搜索栏也不工作..