我正在尝试从url获取数据到我的代码中。我正在使用Service.js执行此操作。以下是我的代码
var demoService = angular.module('demoService', [])
.service('myService', function($http, $q) {
var v=0;
this.getdata = function() {
$http.get('myurl').then(function(data) {
v = data.data.Tweets[0].FAVOURITE_COUNT;
});
return v; // how to return v from here(doesn't return the function's v)
}
})我想通过调用服务在我的AngularJS控制器中使用它:
myService.getdata()//the v = data.data.Tweets[0].FAVOURITE_COUNT needed here但问题是,该函数返回0(外部定义的v),而不是我填充它的值!有没有一种方法可以只处理从URL返回的对象,然后传递一个值并返回它?
提前感谢!
发布于 2015-05-25 19:57:39
$http.get方法返回promise。这意味着数据在返回后被设置为"v“变量。因此,您应该只在promise解析之后才能获取数据。例如:
angular.module('demoService', [])
.service('myService', function($http, $q) {
var data = null;
this.fetchData = function() {
$http.get('myurl').then(function(data) {
data = data.data.Tweets[0].FAVOURITE_COUNT;
});
}
this.fetchDataNoSave = function() {
return $http.get('myurl');
}
this.getData = function() {
return data;
}
})
angular.module('demoService').controller('ViewCtrl', function(demoService, $scope) {
demoService.fetchDataNoSave().then(function(data) {
$scope.v = data.data.Tweets[0].FAVOURITE_COUNT;
})
// OR
demoService.fetchData().then(function() {
$scope.v = demoService.getData();
})
})这些选项的不同之处在于,第一个选项不会在服务中保存状态,而您每次都应该获得这个状态。第二个管理服务中的状态,这意味着每个带有注入服务的控制器都可以访问获取的数据
https://stackoverflow.com/questions/30437586
复制相似问题