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