Angular Geolocation服务不返回任何内容

时间:2016-08-10 04:56:49

标签: angularjs geolocation

我正在尝试在我的角度项目中使用以下地理定位服务来获取位置。 服务文件:

angular.module('myApp')
  .service('geolocation', function ($q, $http) {
    var getLocation = function() {
            var defer = $q.defer();
            // If supported and have permission for location...
            if (navigator.geolocation) {
                // 
                navigator.geolocation.getCurrentPosition(function(position){
                    var result = {latitude : position.coords.latitude , longitude : position.coords.longitude}
                    // Adding randomization since we are all in the same location...
                    result.latitude += (Math.random() >0.5? -Math.random()/100 : Math.random()/100  );
                    result.longitude += (Math.random() >0.5? -Math.random()/100 : Math.random()/100  );
                    getNearbyCity(result.latitude, result.longitude).then(function(data){
                        result.address = data.data.results[1].formatted_address;
                        defer.resolve(result);
                    });
                }, function(error){
                    defer.reject({message: error.message, code:error.code});
                });
            }
            else {
                defer.reject({error: 'Geolocation not supported'});
            }
            return defer.promise;
        }
        var getNearbyCity = function (latitude, longitude){
            var defer = $q.defer();
            var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude +',' + longitude +'&sensor=true';
            $http({method: 'GET', url: url}).
                success(function(data, status, headers, config) {
                     defer.resolve({data : data});
                }).
                error(function(data, status, headers, config) {
                  defer.reject({error: 'City not found'});
                });
            return defer.promise;
        }
        var service = {
            getLocation : getLocation,
            getNearbyCity: getNearbyCity
        };
        return service;
  });

我在控制器中调用它:

    angular.module('myApp')

          .controller('HomeCtrl',  function ($scope, geolocation) {


             geolocation.getLocation().then(function(result){
                $scope.location = result;
                console.log($scope.location);
             });
});

不幸的是,console.log()什么都不返回。 我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

我收到未定义位置的错误。在尝试了各种异步函数并重新定位返回语句后,我发现问题更加荒谬:

我的 Mac 上的定位服务已关闭。

Firefox 没有给我任何通知,但当我在 Chrome 上测试时,弹出窗口建议我“打开设置并打开定位服务”。

只是想我会提到以防万一它让任何人头疼。

答案 1 :(得分:0)

我发现您的代码没有任何问题,请将请求更改为:

'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude +',' + longitude +'&sensor=true';

工作Plunker

答案 2 :(得分:0)

window.navigator.geolocation.getCurrentPosition(function(pos){
  $http.get('http://maps.googleapis.com/maps/api/geocode/json?latlng='+pos.coords.latitude+','+pos.coords.longitude+'&sensor=true').then(function(res){
    console.log(res.data);
  });
})