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方法。
任何想法?
解決了我的問題,我有一個過濾器導致循環。 –
上述控制器實現將$ scope屬性設置爲承諾的第一種方法在Angular 1.3中不再適用。承諾不再被解包,所以你必須使用第二種方法(在後處理程序中設置$ scope屬性) – jbandi
@jbandi:你似乎認爲某些東西已經改變。我沒有得到確切的變化。你介意給我澄清一下嗎?我會相應地更新答案。 –