访问函数外部的值

时间:2015-05-25 11:43:32

标签: jquery angularjs http return

我正在尝试从网址中获取数据到我的代码。我在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并传递一个值并返回它?

提前致谢!

2 个答案:

答案 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();
    })
})

这些选项的不同之处在于第一个选项不会在服务中保存状态,并且每次都应该获得此状态。第二个管理服务中的状态,这意味着每个具有注入服务的控制器都可以访问获取的数据