Phonegap / AngularJS:从内部函数获取lat / long

时间:2014-01-20 15:18:19

标签: javascript angularjs cordova

我正在尝试从函数内部设置几个全局变量,以便我可以在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
        };

    }

2 个答案:

答案 0 :(得分:1)

如果您尝试在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
        };
    });
}

答案 1 :(得分:1)

$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);
            });
        }

否则,如果您想在应用中使用某些全局变量,请使用“服务”。 In Service拥有所有全局数据,然后通过将服务传递给控制器​​来在控制器中访问它。