Highcharts-ng
A simple Angularjs directive for Highcharts.
AngularJs, Highcharts
by Sajeetharan Sinnathurai
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://code.angularjs.org/1.1.0/angular.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/drilldown.js"></script>
<script>if (typeof module !== 'undefined' && typeof exports !== 'undefined' && module.exports === exports){
module.exports = 'highcharts-ng';
}
(function () {
'use strict';
/*global angular: false, Highcharts: false */
angular.module('highcharts-ng', [])
.provider('highchartsNG', highchartsNGProvider)
.directive('highchart', ['highchartsNG', '$timeout', highchart]);
function highchartsNGProvider(){
var modules = [];
var basePath = false;
var lazyLoad = false;
return {
HIGHCHART: 'highcharts.js',
HIGHSTOCK: 'stock/highstock.js',
basePath: function (p) {
basePath = p;
},
lazyLoad: function (list) {
if (list === undefined) {
modules = [this.HIGHCHART];
} else {
modules = list;
}
lazyLoad = true;
},
$get: ['$window', '$rootScope', function ($window, $rootScope) {
if (!basePath) {
basePath = (window.location.protocol === 'https:' ? 'https' : 'http') + '://code.highcharts.com/';
}
return highchartsNG($window, $rootScope, lazyLoad, basePath, modules);
}]
};
}
function highchartsNG($window, $rootScope, lazyload, basePath, modules) {
var readyQueue = [];
var loading = false;
return {
lazyLoad:lazyload,
ready: function (callback, thisArg) {
if (typeof $window.Highcharts !== 'undefined' || !lazyload) {
callback();
} else {
readyQueue.push([callback, thisArg]);
if (loading) {
return;
}
loading = true;
var self = this;
if (typeof jQuery === 'undefined') {
...
JavaScript
var myapp = angular.module('myapp', ["highcharts-ng"]);
myapp.controller('myctrl', function ($scope) {
$scope.highchartsNG = {
options: {
chart: {
type: 'column'
}
},
title: {
text: 'Basic drilldown'
},
xAxis: {
type: 'category'
},
legend: {
enabled: false
},
plotOptions: {
series: {
borderWidth: 0,
dataLabels: {
enabled: true
}
}
},
series: [{
name: 'Things',
colorByPoint: true,
data: [{
name: 'Animals',
y: 5,
drilldown: 'animals'
}, {
name: 'Fruits',
y: 2,
drilldown: 'fruits'
}, {
name: 'Cars',
y: 4,
drilldown: 'cars'
}]
}],
drilldown: {
series: [{
id: 'animals',
data: [
['Cats', 4],
['Dogs', 2],
['Cows', 1],
['Sheep', 2],
['Pigs', 1]
]
}, {
id: 'fruits',
data: [
['Apples', 4],
['Oranges', 2]
]
}, {
id: 'cars',
data: [
['Toyota', 4],
['Opel', 2],
['Volkswagen', 2]
]
}]
} }
});