角度地理编码结果不同步
Angular geocoding results not synchronous
我正试图使用谷歌地理编码作为我可能正在开发的功能的POC,但我遇到了问题。
基本上,它从用户在搜索输入中键入地址开始,地理编码服务返回地址列表,因为不同的地址可能出现在不同的位置,或者如果用户拼写错误,那么用户可以选择正确的地址。
所以第一步搜索(角度控制器(:
$scope.submit = function(addressform) {
$scope.addresses = geocoder.getAddressList($scope.formData.address);
}
Geocoder是一个内部工厂,使用谷歌地图和谷歌地理编码。这是一个与此示例相关的地理编码:
app.factory('geocoder', function(GoogleMap) {
var geocoder = new google.maps.Geocoder(),
return {
getAddressList: function(address) {
geocoder.geocode( { 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results;
} else {
alert("Couldn't find that address! Google Maps says: " + status);
}
});
}
}
});
这是视图部分:
<ul>
<li ng-repeat='address in addresses'>
<a ng-click='displayOnMap()'>{{address.place_id}}</a>
</li>
</ul>
这应该将地理编码结果写入视图中。我遇到的问题是,调用地理编码器方法execute的控制器会立即返回,但在那之后的一段时间,地理编码器实际上会返回结果。
我如何让angular控制器等待,直到geocoder真正调用return语句并返回结果,这样我就可以更新我的html了?
您将无法回避geocoder.geocode
是异步的这一事实。
您有两个选项:第一个选项是将回调传递给getAddressList
,并在成功时调用回调。一个更有角度的方法是使用$q服务。
getAddressList: function(address) {
var deferred = $q.defer();
geocoder.geocode( { 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
deferred.resolve(results);
} else {
deferred.reject("Couldn't find that address! Google Maps says: " + status);
}
});
return deferred.promise;
}
控制器也需要更换:
$scope.submit = function(addressform) {
geocoder.getAddressList($scope.formData.address).then(function(result) {
$scope.addresses = result;
}, function(err) {
alert(err);
});
}
不要从服务中拨打提醒电话。这是一个UI问题。
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- 在控制器和数据对象之间同步数据
- JSONP请求返回结果,但也触发error_callback
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 将地理编码结果转换为php变量以发布到mysql数据库
- 如何从node.js中的HTTP请求中获得同步结果
- 如何在ReactJS中同时调用多个ajax(并同步获得结果)
- 做下划线.js函数,如_.findWhere(),同步返回结果
- 使AJAX“get”函数同步/如何获得结果
- 为什么同步使用承诺会返回异步结果
- 不能输入async(同步)函数的回调/空结果
- 角度地理编码结果不同步
- 如何调用angular's函数同步返回角度之外的函数结果
- 在点击时增加/减少增量计数器的同步结果