1

我在 Ionic 框架中使用 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 个距离值。但列表只显示最后一个值。 在这里我们可以看到距离的 3 个值

4

1 回答 1

4

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

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事件触发时,您还应该从它们的数组中删除键+距离。

于 2015-08-04T00:02:18.300 回答