У меня есть сервис вроде
app.factory('geolocation', function ($rootScope, cordovaReady) {
return {
getCurrentPosition: cordovaReady(function (onSuccess, onError, options) {
navigator.geolocation.getCurrentPosition(function () {
var that = this,
args = arguments;
if (onSuccess) {
$rootScope.$apply(function () {
onSuccess.apply(that, args);
});
}
}, function () {
var that = this,
args = arguments;
if (onError) {
$rootScope.$apply(function () {
onError.apply(that, args);
});
}
}, options);
}),
getCurrentCity: function (onSuccess, onError) {
this.getCurrentPosition(function (position) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode(options,function (results, status) {
var city = address_component.long_name;
});
});
}
}
});
И я хочу сделать из контроллера что-то вроде
function MainCtrl($scope, geolocation) {
geolocation.getCurrentCity(function(city){
$scope.city = city;
});
};
Функция getCurrentPosition отлично работает, и город также определен, но я не знаю, как получить доступ к городу в контроллере.
Что происходит? Когда вызывается getCurrentCity, он вызывает getCurrentPosition для определения gps-коордов. Эти координаты передаются в качестве аргументов для метода onSuccess? Так что это совсем то же самое, что я хочу сделать в методе getCurrentCity, но я не знаю, как это сделать. Асинхронный геокодер извлекает город, я хочу применить новые данные к методу onSuccess.
Любые идеи?