<!DOCTYPE html>
<html data-ng-app="angularD3">
<head>
<script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script type="text/javascript" src="ngCharts.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body data-ng-controller="randomDataCtrl">
<data-column-chart data-dataset="dataset" width="550" height="100"></data-column-chart>
<button data-ng-click="generateDataset()">Update Data</button>
</body>
</html>
var mod = angular.module('ngCharts', []);
mod.directive('columnChart', function(){
return {
replace: true,
template: '<div></div>',
scope: {
dataset: '=',
width: '@',
height: '@'
},
link: function(scope, elem, attrs) {
var svg = d3.select(elem[0])
.append('svg')
.attr('width', scope.width)
.attr('height', scope.height);
svg.selectAll('rect')
.data(scope.dataset)
.enter()
.append('rect')
.attr('x', function(d, i){
return i * (scope.width / scope.dataset.length);
})
.attr("y", function(d) {
return scope.height - d;
})
.attr('width', scope.width / scope.dataset.length - 2) //2px padding between bars
.attr('height', function(d){
return d * 5;
})
.attr("fill", "#1a66ff");
svg.selectAll("text")
.data(scope.dataset)
.enter()
.append("text")
.text(function(d) {
return d;
})
.attr('x', function(d, i){
return i * (scope.width / scope.dataset.length) + 5;
})
.attr("y", function(d) {
return scope.height - d + 15;
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "#f6f4f4");
scope.$watchCollection('dataset', function() {
svg.selectAll('rect')
.data(scope.dataset)
.transition()
.attr("y", function(d) {
return scope.height - d;
})
.attr('height', function(d){
return d * 5;
});
svg.selectAll('text')
.data(scope.dataset)
.transition()
.text(function(d) {
return d;
})
.attr("y", function(d) {
return scope.height - d + 15;
});
});
}
};
});
var app = angular.module('angularD3', ['ngCharts']);
app.controller('randomDataCtrl', function($scope) {
$scope.dataset = [];
$scope.generateDataset = function() {
$scope.dataset = []; // clear
for (var i = 0; i < 20; i++) { // generate 25 numbers
$scope.dataset.push(Math.floor(Math.random() * 70 + 30)); // generate numbers between 30 to 99
}
};
$scope.generateDataset();
});