0

在我的 ionic2 应用程序中,我需要显示一个列表,其中实时更新最近的地点(酒吧、餐厅等)信息。正如我在 GeoFire 文档上阅读的那样,我应该在树中单独保存位置和地点详细信息数据。所以我的firebase中有以下内容:

-geoplacesdata
    -placeID1
       -g:"spdxm88qvr"
       -l
         -0: 43.4658582
         -1: 3.7578978000000234
     -placeID2
        -g:"spdxm88qvr"
        -l
          -0: 45.4658582
          -1: 4.7578978000000234

-places_details
     -placeID1
         -rate: 2
         -name: "Place 1"
         -infos:"Free cocktail"

     -placeID2
         -rate: 3
         -name: "Place 2"
         -infos:"Free for kids"

当用户加载页面时,我得到了他的位置,并且使用 GeoFire,我能够得到他所在区域附近的每个 placeID。很酷但现在变得非常棘手......现在我得到了所有地点 ID,我想显示这些地点的所有详细信息并订阅每个选定地点 ID 的“信息”子项中发生的每个更新

我试过了:

geoQuery.on("key_entered", (key) => {
placesRef.child(key).on("value", (snapshot) => {
var placesDetails = snapshot.val();
// .. and push each places details snapshot in an array named "matches"
this.matches.push(placesDetails);
});
});

它起作用了,我得到所选placesID的所有地点详细信息,但是一旦更新了地点(例如:子“信息”已更新),就会将新密钥推送到数组中,并且我得到重复的信息..

还有比这更好的解决方案吗?

4

1 回答 1

0

要解决此问题,您只需将唯一项目插入到您的数组中。每当一个键触发key_entered事件时,您将该数据推送到您的阵列,但您必须检查它是否已经存在。

例如

if (this.matches.findIndex((x) => x.$key === placesDetails.$key) === -1) {
  this.matches.push(placesDetails)
}
于 2017-08-25T12:32:03.303 回答