GeoFire geoQuery.on() 将返回值存储到数组中以供后者使用

GeoFire geoQuery.on() storing the returned values into an array for using latter

我在 Ionic Framework 中使用 Geo Fire 和 Angular JS,这里是我的 Geo Fire 代码看起来像

geoQuery = geoFire.query({
 center: [location.lat, location.lng],
 radius: 5
});

geoQuery.on("key_entered", function(key, location, distance){//something here})

在这里,我通过这三个变量(分别是键、位置和距离)获取我需要的所有匹配信息。在这种情况下,我的查询匹配了来自 firebase 的 3 个信息。现在我想使用 ng-repeat 将信息显示到离子列表中。为此,我使用以下代码将这些信息保存到一个数组中。

var hello = geoQuery.on("key_entered", function(key, location, distance) {
  var names = [];
  names.push(key);
  distance = distance.toFixed(2);
  var distances = [];
  distances.push(distance);
});

但是我的列表只显示信息中的最后一个值。在这里,我截取了控制台的屏幕截图。在这里我们可以看到与我的查询匹配的这 3 个距离值。 但是列表只显示最后一个值。

让我们分析您的代码,看看我们是否可以解释您看到的行为:

var hello = geoQuery.on("key_entered", function(key, location, distance) {
  var names = [];
  names.push(key);
  distance = distance.toFixed(2);
  var distances = [];
  distances.push(distance);
});

每次有键进入查询标识的区域,都会执行回调函数。在该函数中,您创建了两个数组并向它们添加键和距离。因此,对于每个键,您都创建了两个新数组,这可能不是您想要的。

这样试试:

var names = [];
var distances = [];
var hello = geoQuery.on("key_entered", function(key, location, distance) {
  names.push(key);
  distance = distance.toFixed(2);
  distances.push(distance);
});

现在每次键进入该区域时,您都将键和距离添加到现有数组中。所以随着时间的推移,你会在那个数组中得到很多键和距离。

请记住,当 key_exited 事件触发时,您还应该从数组中删除键和距离。