工厂嵌套的数据无法由控制器(ANGULAR JS)

时间:2016-06-21 13:58:59

标签: javascript jquery angularjs json

好吧,我开始......

我已经有一个工厂可以成功加载JSON文件中的数据:

FIRST FACTORY:

statisticsModule.factory('globalFactory', ['$http', function($http){
  return $http.get('../statistics/php/config_statistics.json')
  .success(function(data){
    return data;
  })
  .error(function(err){
    return err;
  });
}]);

我想:

  1. 阅读包含此JSON的特定网址
  2. 在另一家工厂内注入工厂,该工厂读取上述网址的数据。
  3. 此工厂加载数据并通过我想要的控制台返回:

    第二工厂:

    statisticsModule.factory('statusFactory', ['globalFactory', '$http', function(globalFactory, $http){
    
      return globalFactory.success(function(data){
    
          var deserialize = angular.fromJson(data.config.graph_conf_array.arrayReportBD);
          var statusUrl = deserialize[0];
    
          $http.get(statusUrl).success(function(data){
            console.log(data);
          }).error(function(err){
           err;
          });
    
        });
    
    }]);

    但我想要第三项任务:

    1. 在控制器中注入数据

      这是我的控制者:

    2. statisticsModule.controller('tableController', ['statusFactory', '$scope', '$http', function(statusFactory, $scope, $http){
      
      statusFactory.success(function(){
        
      });
      
      }]);

      如果我想在我的控制器中加载第二工厂的数据,我该怎么做?

      抱歉英语不好,并提前致谢。

1 个答案:

答案 0 :(得分:0)

首先不要使用.success,因为它对promise链接没有帮助。 .success不会创建一个新的承诺,它会返回原来的承诺。

第一工厂

statisticsModule.factory('globalFactory', ['$http', function($http){
  return $http.get('../statistics/php/config_statistics.json')
   .then(function(response){
     return response;
   }, function (error) {
     return error. 
   })
}]);

第二工厂

statisticsModule.factory('statusFactory', ['globalFactory', '$http', function(globalFactory, $http){

   return globalFactory.then(function(data){
        var deserialize = angular.fromJson(data.config.graph_conf_array.arrayReportBD);
        var statusUrl = deserialize[0];
        return $http.get(statusUrl);
   }).then(function (data) {
        return data;
   });

}]);

现在在您的控制器中

statisticsModule.controller('tableController', ['statusFactory', '$scope', '$http', function(statusFactory, $scope, $http){

    statusFactory.then(function(data){   // data is the data received after get call to statusUrl
        // do something
    });

}]);