【问题标题】:filter a $firebaseArray Typescript过滤 $firebaseArray 打字稿
【发布时间】: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 上调用 ononce 来访问数据(通过回调或承诺)。它在docs
  • 即使这样做我仍然会收到错误,如果我将数据存储到数组中,我将无法过滤数组。他们有什么方法可以让 snap.val() 成为一个数组吗?

标签: typescript firebase firebase-realtime-database


【解决方案1】:

稍微阅读 anuglarfire 文档后,我开始思考如何通过查询调用将其放入数组中。 docs

这是我最终得到的代码

public getSelectedHero(hero:string):CharacterCard[] {
  let cards = firebase.database().ref().child('cards');
  let selectionQuery = cards.orderByChild('affiliation').equalTo(hero);

  this.selectionOfHeros = this.$firebaseArray(selectionQuery);

  return this.selectionOfHeros;  
}

【讨论】:

  • 这很有趣,虽然你不能操纵 this.seelectionOfHeros。例如,如果我想在 this.selectionOfHeros 上做一个 foreach ,它将通过错误 this is not a function
  • 我在这里找到了我的问题的答案stackoverflow.com/questions/30061790/…
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2022-09-24
  • 2023-04-02
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多