【发布时间】:2017-06-16 09:35:21
【问题描述】:
我有一项要过滤的服务以及我从 firebase 提取的数组或数据。我是 firebase 的新手,所以我可能做错了我对新想法持开放态度,这就是我在服务中的功能。
public getSelectedHero(hero:string):CharacterCard[] {
this.cards = firebase.database().ref().child('cards');
this.selectionOfHeros = this.cards.filter(card => card.affiliation === hero);
return this.selectionOfHeros;
}
所以我要做的是发送一个参数,该参数将根据用户点击的内容过滤数组。
我收到一条错误消息,说过滤器不是函数...但它是用于数组的。
更新到这个
public getSelectedHero(hero:string):CharacterCard[] {
let cards = firebase.database().ref('cards').once('value');
cards.then(snap => {
this.heroCards = snap.val();
console.log(this.heroCards);
this.selectionOfHeros = this.heroCards.filter(card => card.affiliation === hero);
})
console.log('selections' + this.selectionOfHeros)
return this.selectionOfHeros;
}
过滤器是我遇到问题的地方,我只想在拍摄快照后对数组进行排序。
我是通过文档找到的,可以使用orderByChild()然后设置equalTo()对数据库进行排序。这给了我我想要的数据,但我真的不想查询数据库,我想在 web 端操作数据。
public getSelectedHero(hero:string):CharacterCard[] {
let cards = firebase.database().ref('cards');
cards.orderByChild('affiliation').equalTo(hero).on('value' , snap => {
this.heroCards = snap.val();
})
return this.heroCards;
}
【问题讨论】:
-
Firebase 不能这样工作。
child返回一个 ref,而不是一个数据数组。您需要在 ref 上调用on或once来访问数据(通过回调或承诺)。它在docs。 -
即使这样做我仍然会收到错误,如果我将数据存储到数组中,我将无法过滤数组。他们有什么方法可以让 snap.val() 成为一个数组吗?
标签: typescript firebase firebase-realtime-database