Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在Angular js中从3种不同类型的json获取数据_Angularjs - Fatal编程技术网

Angularjs 在Angular js中从3种不同类型的json获取数据

Angularjs 在Angular js中从3种不同类型的json获取数据,angularjs,Angularjs,我有3个不同的json文件chart1.json、chart2.json、chart3.json。所有JSON都有不同的数据结构,JSON所需的关键之一是分别为“时间戳”、“fieldname”和“statename”,需要放入一个名为“category”的变量中,该变量将在html上查看3个不同的图表。就像3个不同的图表将有3个类别“timestamp”,fieldname“和州名”。 我需要用一个图表控制器 对这些json文件进行3次不同的调用是唯一的方法吗 var model = {}

我有3个不同的json文件
chart1.json、chart2.json、chart3.json
。所有JSON都有不同的数据结构,JSON所需的关键之一是分别为
“时间戳”、“fieldname”和“statename”
,需要放入一个名为“category”的变量中,该变量将在html上查看3个不同的图表。就像3个不同的图表将有3个类别
“timestamp”,fieldname“
州名”
。 我需要用一个图表控制器

对这些json文件进行3次不同的调用是唯一的方法吗

  var model = {};

  angular.module('yourApp', [])

  .run(function($http) {

    $http.get("chart1.json").success(function(data) {
      model.chart1 = data;
    });

    $http.get("chart2.json").success(function(data) {
      model.chart2 = data;
    });

    $http.get("chart3.json").success(function(data) {
      model.chart3 = data;
    });

  })

  .controller('ChartCtrl', ['$scope', '$http', function($scope, $http) {

    $scope.someCharts = model;

  }]);

非常确定3个http响应是唯一的方法,除非您有一个服务器和数据库可以为您解析JSON或其他什么东西。SuperVeetz将这些调用放在视图的resolve函数中不是更好吗

解决

resolve: {
            'init':function (initService) {
                return initService.init();
            }
在哪里 InitService保存以下请求:

module.factory('initService', function($q, $http) {
            var request = $q.defer();
            return {
                init: function(option) {
                        chart1 = $http.get('path/to/json/');
                        chart2 = $http.get('path/to/json/');
                        chart3 = $http.get('path/to/json/');
                        $q.all([chart1, chart2, chart3])
                            .then(function(responses) {
                                    request.resolve(responses);
                                }
                        }
}

ctrl:

module.controller('ChartCtrl', ['$scope', 'init', function($scope, init) {
    $scope.someCharts = init;
   }]);

如果您想进行一次调用,则需要在服务器上创建一个函数,在您使用特定的api调用请求时,该函数将三个JSON文件合并(重新构造)为一个

$http.get('/api/getThreeInOne').then(function(data){ return data;}

请共享您的代码?我总是不知道何时使用$resolve或$http。你能给我提供一些我能理解实际差异的参考吗?在渲染视图/控制器运行之前,解析函数将被调用。因此,如果要处理数据,应将其加载到resolve函数中。这样,只有在获取数据时,控制器才会启动。在控制器内,解析函数中的数据可用解析对象中提供的名称。这里是“init”。