将4个angularfire2可观测量组合成1

时间:2017-07-11 17:19:03

标签: angular firebase firebase-realtime-database angularfire2

这是我的新应用。

DB

Angular fire 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的数据

2 个答案:

答案 0 :(得分:1)

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

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.
)

答案 1 :(得分:0)

我对代码做了一些更改。

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;

  }


}

这种方式有效,enter image description here

问题是:enter image description here

它不显示数据,而且搜索栏也没有显示...