我已经用ionic 2编写了我的应用程序并跟随tutorial of Josh Morony,但我不知道如何从我的firebase数据库中获取特定元素。
例如我有这棵树:
user
|__ (user_id)
|_ name : 'toto'
等等......
我试过这种方式:
elt: FirebaseListObservable<any[]>;
this.elt = af.database.list('/user');
但我如何处理所选数据呢?
答案 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
值