我去服务器并获得一个JSON阵列污染一对纬度/长对的阵列&一些其他信息(例如车辆描述,时间戳)。对于每一个,我想使用谷歌地图来反转地理编码&获取街道地址,然后将数据放入ng-grid。
我的ng-Grid绑定到$scope.myGrid
,直到现在,没有反向地理编码,我只是循环JSON数据和$scope.myGrid.push('{When: data[i].time_stamp, Vehicle: data[i].description'}
。
工作正常,现在我想添加反向地理编码,AFAIK意味着使用$http.get
。
由于这是异步的,我最初使用“[address not available]”填充网格的“地址”列。
当我收到回复时,我想从结果中设置$scope.myGrid[???].address
。
但是,我怎么知道索引???
是什么?如果我有3个未完成的异步请求并得到响应,我怎么知道它对应哪个网格行?
我的$http.get
位于for(var i = 0; i < data.length; i++)
循环的中间位置。我可以以某种方式将i
传递给$http.get
功能吗?或者我该怎么办?
抱歉,我只是在学习。
答案 0 :(得分:1)
我认为$http
不需要了解i
,但then
成功回调确实如此。以下内容应该会有所帮助。
angular.forEach(data, function(datum, i) {
$http.get(...).then(function(response) {
// Here you have the response and i available
});
});
注意:我故意使用angular.forEach
而不是for
循环。由于i
中for
变量的性质,如果您在for
循环中定义了异步回调,i
实际上将始终等于其最终值,{ {1}}每次回调。使用data.length - 1
可以避免此问题。
答案 1 :(得分:1)
如果要使用“for”,则需要使用Anonymous函数来执行此操作。将我传递给匿名函数。
for(var i = 0; i < $scope.myGrid.length; i++){
(function(i){
$http.get(...).success(function(data){
$scope.myGrid[i].address = data
});
})(i);
}
恕我直言,“forEach”在你的情况下可能更好
$scope.myGrid.forEach(function(item, i){
//item equels $scope.myGrid[i]
$http.get(...).success(function(data){
item.address = data
});
});