gpt4 book ai didi

javascript - Angular.js 将数据从异步服务传递到作用域

转载 作者:可可西里 更新时间:2023-11-01 02:13:31 24 4
gpt4 key购买 nike

我有这样的服务

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;
});
});
}
}
});

我想从 Controller 做类似的事情

function MainCtrl($scope, geolocation) {
geolocation.getCurrentCity(function(city){
$scope.city = city;
});
};

getCurrentPosition 工作正常,城市也已确定,但我不知道如何在 Controller 中访问城市。

会发生什么? 调用 getCurrentCity 时,它会调用 getCurrentPosition 来确定 gps 坐标。这个坐标作为参数传递给 onSuccess 方法,对吧?所以这与我想在 getCurrentCity 方法中做的完全相同,但我不知道如何做。异步地理编码器检索到城市后,我想将新数据应用到 onSuccess 方法。

有什么想法吗?

最佳答案

您正在处理回调和异步请求。所以你应该使用 $q服务。只需使用 $rootScope 和 cordovaReady 依赖项将其注入(inject)到您的服务中。并像这样将 promise 添加到您的函数中

getCurrentCity: function () {
var deferred = $q.defer();
this.getCurrentPosition(function (position) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode(options,function (results, status) {
var city = address_component.long_name;
$rootScope.$apply(function(){
deferred.resolve(city);
});
});
});
return deferred.promise;
}

然后在您的 Controller 中,执行以下操作来处理 promise 。

function MainCtrl($scope, geolocation) {
geolocation.getCurrentCity().then(function(result) { //result === city
$scope.city = result;
//do whatever you want. This will be executed once city value is available
});
};

关于javascript - Angular.js 将数据从异步服务传递到作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17684153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com