我正在尝试从网址中获取数据到我的代码。我在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返回的Object并传递一个值并返回它?
提前致谢!
答案 0 :(得分:0)
使用Ajax调用
<强>服务强>:
的
的var demoService = angular.module('demoService', [])
.service('myService',['$http', function($http) {
this.getdata = function(entity){
var promise = $http({
method : 'POST',
url : 'services/entity/add',
data : entity,
headers : {
'Content-Type' : 'application/json'
},
cache : false
}).then(function (response) {
return response;
});
return promise;
};
}]);
的
控制器:
var demoService = angular.module('demoService', [])
.controller('myctr',['$scope','myService',function($scope,myService){
myService.getdata().then(function(response){
//Success
},function(response){
//Error
});
}]);
的
答案 1 :(得分:0)
$ http.get方法返回promise。这意味着在您返回数据后,数据将设置为“v”变量。因此,只有在解决了promise后才能获取数据。 E.g:
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();
})
})
这些选项的不同之处在于第一个选项不会在服务中保存状态,并且每次都应该获得此状态。第二个管理服务中的状态,这意味着每个具有注入服务的控制器都可以访问获取的数据