从Ionic 2中的Firebase获取数据

时间:2017-02-22 18:37:14

标签: firebase firebase-realtime-database ionic2 angularfire

我已经用ionic 2编写了我的应用程序并跟随tutorial of Josh Morony,但我不知道如何从我的firebase数据库中获取特定元素。

例如我有这棵树:

user

|__ (user_id)

  |_ name : 'toto'

等等......

我试过这种方式:

elt: FirebaseListObservable<any[]>;
this.elt = af.database.list('/user');

但我如何处理所选数据呢?

2 个答案:

答案 0 :(得分:3)

我发现这个解决方案与你的相似:

af.database.list('/user', { preserveSnapshot: true})
    .subscribe(snapshots=>{
        snapshots.forEach(snapshot => {
            console.log(snapshot.key, snapshot.val());
                this.items.push({
                id: snapshot.key,
                name: snapshot.val().name
            });
        });
    });

答案 1 :(得分:3)

为了从提供者处获取数据作为数组,您需要返回一个在使用返回数据触发firebaseListObservable事件后将返回的promise。

在您的提供商.ts

getData(fbPath): Promise<any> {
  return new Promise(resolve => {
    this.db.list(fbPath).subscribe(data => {
      resolve(data);
    })
  })
}

此处承诺会在填充data后解析,并返回一个可轻松访问$value$key属性的数组。这对于创建条件或复杂查询或具有通用属性的提供者服务(与直接查询firebaseListObservable的快照相反)非常理想

在您的控制器中,您可以编写类似

的内容
 this.providerName.getData('users').then(data => {
    console.log('data',data);
  })

这将返回值为

的对象文字
  • $存在
  • $键
  • $值

现在,如果你想要一个匹配条件,你可以在表data的{​​{1}}上使用匹配条件遍历$key

users

使用像lodash这样的库可以找到更整洁的语法例如,如果您希望条件与存储的ID匹配,请说if(myUserIdVar === data.$key){ // do something here }; 您可以执行简单的firebase.auth().currentUser.uid

_.find

import { find } from 'lodash'; import * as firebase from 'firebase'; // Or just the firebase auth stuff ... let filteredUser = find(data, ['$key', firebase.auth().currentUser.uid]) 值将等于$key