在Angular中异步加载工厂坐标
Loading Coordinates in a Factory Asynchronously in Angular
对工厂的调用在地图控制器中返回得太快了。我试图设置地图的中心,但由于调用geo返回未定义,它永远不会设置中心。然而,坐标是在地理工厂中抓取的。他们只是太迟了。
我认为。then()的目的是等待返回的日期。那么,如何强制应用等待呢?
我的工厂是:
angular.module('comhubApp')
.factory('geo', function ($q) {
var getPosition = function () {
var deferred = $q.defer();
if (navigator.geolocation) {
deferred.resolve(navigator.geolocation.getCurrentPosition(function (position) {
var crd = position.coords;
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
return crd;
} ));
}
return deferred.promise;
}
// Public API here
return {
getPosition: getPosition
};});
我的地图控制器用:
// GEOLOCATION
geo.getPosition().then( function (position) {
console.log(position);
$scope.center.lat = position.latitude;
$scope.center.lon = position.longitude;
});
您正在调用deferred。定位前解决。getCurrentPosition已经返回。你需要在
之后调用它var getPosition = function() {
var deferred = $q.defer();
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var crd = position.coords;
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
deferred.resolve(crd);
});
}
return deferred.promise;
}
这是一个工作活塞:http://plnkr.co/edit/H7LEjsrSkZOzGBZIeTXF?p=preview
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 如何在d3.js中返回路径的y坐标
- Angularjs工厂注入错误
- 如何将参数传递到angularJs中的工厂
- 在谷歌地图上获取事件的x,y坐标
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 为什么只有工厂在棱角分明的网站上被提及
- AngularJS:$q.dedefe()不能由工厂方法共享
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何在JS Leatflet绘图插件中获取圆的坐标
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- Angular,函数在(模型)工厂中返回值
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何使用异步调用更改工厂的变量
- 将变量传递到工厂
- 查找带有边框的HTML5 Canvas(点击)事件的坐标
- HTML5获取弧的坐标's结束
- 如何在OpenLayers中获取动态绘制的多边形的坐标
- 注入工厂时,Angular停止工作
- 在Angular中异步加载工厂坐标