vinoth
vinoth

Reputation: 111

Populate Highchart using json data in Angular js

I am trying to populate data from json file to Highchart. my example json file is same as Highchart example, my data.json would be:

{"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]
        }]}

My html file is

<!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);
});

Now i am able to populate the chart for one name only and datacurrent output

but i need to feed all data from json file. what is the point i am missing here. Regards, Vinoth Kannan P

Upvotes: 1

Views: 1658

Answers (1)

Sajeetharan
Sajeetharan

Reputation: 222722

You need to push the data array into the series,

    $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);
    }

Here is the DEMO APP

Upvotes: 1

Related Questions