Ich habe einen Dienst wieAngularjs passieren Daten von Asynchron-Service zum Umfang
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;
});
});
}
}
});
Und ich will von einem Controller, etwas zu tun wie
function MainCtrl($scope, geolocation) {
geolocation.getCurrentCity(function(city){
$scope.city = city;
});
};
Die getCurrentPosition funktioniert gut und die Stadt ist bestimmt auch, aber ich weiß nicht, wie man in der Steuerung auf die Stadt zugreift.
Was passiert? Wenn getCurrentCity aufgerufen wird, ruft es getCurrentPosition auf, um die GPS-Koordinaten zu ermitteln. Diese Coords werden als Argumente an die onSuccess-Methode übergeben, oder? Das ist genau das gleiche, was ich in der Methode getCurrentCity machen möchte, aber ich weiß nicht wie. Sobald der asynchrone Geocoder die Stadt abgerufen hat, möchte ich die neuen Daten auf die onSuccess-Methode anwenden.
Irgendwelche Ideen?
Mein Problem behoben, ich hatte einen Filter, der die Schleife verursachte. –
Der erste Ansatz in der obigen Controller-Implementierung, eine $ scope-Eigenschaft auf ein Versprechen zu setzen, funktioniert in Angular 1.3 nicht mehr.Versprechen werden nicht mehr ausgepackt, daher müssen Sie den zweiten Ansatz verwenden (indem Sie die $ scope-Eigenschaft im then-Handler festlegen) – jbandi
@jbandi: Sie scheinen darauf hinzuweisen, dass sich etwas geändert hat. Ich habe nicht verstanden, was genau die Änderung ist. Macht es dir etwas aus, es für mich zu erklären? Ich werde die Antwort entsprechend aktualisieren. –