我是angularjs的新手,我正在尝试创建新的提供商。这是我的代码:
myApp.provider('$Data', function() {
this.URL = 'http://maps.googleapis.com/maps/api/geocode/json?address=Singapore, SG, Singapore, 153 Bukit Batok Street 1&sensor=true';
this.$get = $get;
$get.$inject = ['$http', '$q'];
function $get($http, $q) {
var that = this;
return {
isConnected: function() {
var bIsConnected = 'Default';
$http({method: 'GET', url:that.URL}).then(function (data) {
bIsConnected = 'Yes';
alert('Run this code!');
}, function (data) {
bIsConnected = 'No';
});
return bIsConnected;
}
}
}
});
Jsfiddle演示: http://jsfiddle.net/0udm9/9dPsb/6/
运行$ Data.isConnected()之后,虽然浏览器显示警告框,但结果始终为“默认”。我认为它来自成功功能不是$ get。在这种情况下,我必须使用提供商,而不是服务或工厂。我能解决这个问题吗?
谢谢,
答案 0 :(得分:2)
您必须在代码中使用promise。 DEMO
提供者:
isConnected: function() {
var deferred = $q.defer();
$http.get(that.url).then(function(res) {
deferred.resolve('Yes');
console.log('example:success', res);
}, function(err) {
deferred.resolve('No');
console.log('example:error', err);
});
return deferred.promise;
}
控制器:
$Data.isConnected().then(function(data) {
$scope.data = data;
});
// UPD
如果需要使用带有异步代码的返回值,则必须使用对象。 DEMO
// UPD 2