【问题标题】:Unable to access $http response data in Angular JS factory无法访问 Angular JS 工厂中的 $http 响应数据
【发布时间】:2015-04-29 01:40:45
【问题描述】:

我正在尝试将$http 响应数据保存在 angularJS 工厂内的变量中。但我无法访问 http 方法之外的响应。它显示undefined。我检查了这个链接Injecting $scope into an angular service function() 请让我知道如何处理这个问题。 以下是工厂代码:

angular.module('myapp')
  .factory('CardNumberFactory',['$http', function ($http) {
    // Service logic
    var details={};
  
    $http.get('scripts/services/mock.json')
      .then(function(responce){       
        var resopnceData = responce.data;
            details=resopnceData;
      });

    console.log(details);
    return {details:details};
}]);

【问题讨论】:

  • 在您记录变量时,它仍然是undefined。它只在 .then 内部定义,一段时间后异步发生。
  • return $http.get(..) 改为 - 这将返回一个承诺 - 并在控制器中 .then 它并将返回值分配给您的 $scope

标签: angularjs angularjs-scope angularjs-service


【解决方案1】:

因为 $http 服务是异步的。你应该这样做:

angular.module('myapp')
  .factory('CardNumberFactory',['$http', function ($http) {

    var details={};

    function getData() {
      return $http.get('scripts/services/mock.json')
       .then(function(response){
         return {details: response.data}
      });      
    }

    return {

        getData: getData

     }

}]);

angular.module('myapp').controller('TestController, function($scope,CardNumberFactory) {

  CardNumberFactory.getData().then(function(res) {
      //  res is the {details} object
  })

})

【讨论】:

  • 我采用了同样的方法,而且效果非常好!但我试图将响应数据保存在单独的全局变量中,以便与另一个控制器共享数据。我该怎么做?
  • 您可以将工厂注入您想要的任何控制器并调用此函数并获取数据,或者您可以制作一个常量并将数据保存在那里,有很多方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2022-10-18
相关资源
最近更新 更多