我正在尝试从函数内部设置几个全局变量,以便我可以在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.log
在onSuccess
处理程序之前被调用。
更新:
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
};
});
}