2015-08-20 2 views
1

У меня есть 3 разных json-файла chart1.json, chart2.json, chart3.json. Все jsons имеют разную структуру данных, и один из ключей, который требуется от jsons, равен "timestamps","fieldname" and "statename" соответственно и должен быть помещен в varibale под названием «категория», который будет отображаться на html для 3 разных диаграмм. Подобно 3 различным диаграммам, 3 категории "timestamp",fieldname" и "statename". Мне нужно сделать это с помощью одного диспетчера диаграмм.Извлечение данных из 3 разных типов json в Angular js

Выполняет 3 разных вызова этих файлов json - единственный способ?

+0

Делитесь своим кодом, пожалуйста? – Vineet

ответ

0
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 является единственным способом, inless у вас есть сервер и база данных, которая может разбирать JSON для вас или что-то

+0

Я думал то же самое, спасибо SuperVeetz –

2

SuperVeetz Не было бы лучше, чтобы поставить эти вызовы в решимости функция зрения?

решительность

resolve: { 
      'init':function (initService) { 
       return initService.init(); 
      } 

где inititService держит запросы:

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; 
    }]); 
+0

Я всегда был смущен, когда нужно использовать $ resolve или $ http. можете ли вы предоставить мне какую-либо ссылку, где я могу понять реальное различие? –

+0

функция разрешения будет называться _before_, ваше представление визуализируется/запускается контроллером. поэтому, если вы хотите работать с данными, вы должны загрузить их в свою функцию разрешения. Чтобы ваш контроллер запускался только при извлечении данных. внутри вашего контроллера данные из вашей функции разрешения доступны с именем, которое вы указали в объекте разрешения. здесь это «init». – CanK

0

Если вы хотите сделать один звонок, вам нужно будет создать функцию на сервере, которая объединяет (переструктурирует) ваши три файла JSON в один, как только вы запросите его с помощью специального вызова api.

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