使用Angular js中的json数据填充Highchart

时间:2016-08-21 17:45:07

标签: javascript jquery angularjs json highcharts

我正在尝试将数据从json文件填充到Highchart。我的示例json文件与Highchart示例相同,我的data.json将是:

{"yData":[{
            "name": "Tokyo",
            "data": [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }, {
            "name": "New York",
            "data": [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
        }, {
            "name": "Berlin",
            "data": [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
        }, {
            "name": "London",
            "data": [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
        }]}

我的html文件是

<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>High chart using directive</title>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  <script src="http://code.highcharts.com/highcharts.js"></script>
  <script type="text/javascript" src="script.js"></script>  
 </head>
 <body>
  <section ng-app="charts">
   <div ng-controller="Ctrl">
        <highchart chart='{{renderChart}}'></highchart>
        <table>
            <tr ng-repeat="record in jsondatafeed">
                <td>{{record.Name}}</td>
                <td>{{record.Score}}</td>
            </tr>
        </table>
   </div>
  </section>
 </body>
</html>

var app = angular.module('charts', []);

app.directive('highchart', function () {
return {
    restrict: 'E',
    template: '<div></div>',
    replace: true,

    link: function (scope, element, attrs) {

        scope.$watch(function () { return attrs.chart; }, function () {

            if (!attrs.chart) return;

            var charts = JSON.parse(attrs.chart);

            $(element[0]).highcharts(charts);

        });
    }
};
});


app.controller('Ctrl', function ($scope, $http, $timeout) {
$http.get('data.json').success(function (data, status) {

    var score = [];
    

    var name = [];
    for (var i = 0; i < data.length; i++) {
        name.push(data[i].Name);
		for (var j = 0; j < data.length; j++) {
        score.push(data[j].Score);   
    }
    }

    $scope.renderChart = {
        chart: {
            type: 'line'
        },
        xAxis: {
            categories:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
		yAxis: {
            title: {
                text: 'Temperature (°C)'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        series: [{
			name: name,
            data: score
        }],
		
		
        legend: {
            enabled: false
        }
    };
}).error("error message");
$timeout($scope.fetch, 1000);
});

现在我可以只为一个名称和数据current output

填充图表

但我需要从json文件中提供所有数据。我在这里错过了什么。 问候, Vinoth Kannan P

1 个答案:

答案 0 :(得分:1)

您需要将数据阵列推送到系列中,

    $scope.jsondatafeed = data.yData;
    console.log($scope.jsondatafeed);
    $scope.Plotcat = [];
    $scope.PlotData = [];
    for (var key in $scope.jsondatafeed) {
      console.log($scope.jsondatafeed[key]); // the whole array (index)
      $scope.PlotData.push($scope.jsondatafeed[key]);
      var category = $scope.jsondatafeed[key];
      $scope.Plotcat.push(category.name);
    }

以下是DEMO APP