私は次のようなサービスを持っています
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 メソッドに適用したいと思います。
何か案は?