phonegap/angularjs:从内部功能中获取lat/long



我正在尝试从函数内部设置几个全局变量,以便我可以在Angular Ctrl中使用结果。

我已经尝试了我能想到的一切,并且似乎无法在功能之外获得变量。我知道这可能是简单的,但只是无法弄清楚!

事先感谢您的帮助。

onSuccess = function(position) {
        lat = position.coords.latitude;
        lon = position.coords.latitude;
        // alert('Latitude: '          + position.coords.latitude          + 'n' +
        //       'Longitude: '         + position.coords.longitude         + 'n' +
        //       'Altitude: '          + position.coords.altitude          + 'n' +
        //       'Accuracy: '          + position.coords.accuracy          + 'n' +
        //       'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + 'n' +
        //       'Heading: '           + position.coords.heading           + 'n' +
        //       'Speed: '             + position.coords.speed             + 'n' +
        //       'Timestamp: '         + new Date(position.timestamp)      + 'n');
    };
    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + 'n' +
              'message: ' + error.message + 'n');
    }
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
    // ??????
    console.log(getCurrentPosition.lat);

编辑:这是控制器

我需要取代LAT和LON代替当前的硬编码版本:

var app = angular.module('presto-map', ["ngResource", "ngSanitize", "google-maps"]);
    function mapCtrl ($scope) {
        // Initialise the map
        $scope.map = {
            center: {
                latitude: 53.58684546368308,
                longitude: -1.5543620512747744
            },
            zoom: 8
        };
    }

$window传递给您的控制器,并在范围中设置lat lng

       $scope.getCurrentLocation = function () {
            $window.navigator.geolocation.getCurrentPosition(function(position) {
                $scope.$apply(function() {
                    $scope.latitude = position.coords.latitude;
                    $scope.longitude = position.coords.longitude;
                    $scope.accuracy = position.coords.accuracy;
                });
                }, function(error) {
                    alert(error);
            });
        }

否则,如果您想在应用程序中使用一些全局变量,则使用服务。在服务中具有所有全局数据,然后通过将服务传递给控制器来访问控制器。

如果您想在console.log中富含lat变量,那么问题是您的console.logonSuccess处理程序之前被调用。

更新:

var app = angular.module('presto-map', ["ngResource", "ngSanitize", "google-maps"]);
function mapCtrl ($scope, $q, $window) {
    function getPosition() {
        var deferred = $q.defer();
        $window.navigator.geolocation.getCurrentPosition(function(position) {
            $scope.$apply(function() {
                deferred.resolve({
                    latitude : latitude,
                    longitude : longitude,
                    accuracy  : accuracy
                });
            })
        }, function(error) {
            deferred.reject(error);
        });
        return deferred.promise;
    }
    // Initialise the map
    getPosition().then(function(result) {
        $scope.map = {
             center: {
                latitude: result.latitude,
                longitude: result.longitude
            },
            zoom: 8
        };
    });
}

相关内容

最新更新