<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Angular 2 FusionCharts Demo</title>
<!-- 1. Load custom CSS & fonts-->
<link rel="stylesheet" href="style.css">
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:300' rel='stylesheet'>
<!-- 2. Load Angular 2 specific libraries -->
<script src="https://code.angularjs.org/2.0.0-beta.17/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.17/Rx.umd.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.17/angular2-all.umd.dev.js"></script>
<!-- 3. Load FusionCharts library-->
<script src="https://static.fusioncharts.com/code/latest/fusioncharts.js"></script>
<!-- 4. Load component -->
<script src='main.js'></script>
</head>
<body>
<!-- 5. Display the application -->
<angular-chart>Loading...</angular-chart>
</body>
</html>
(function(chartApp) {
chartApp.AppComponent = ng.core.Component({
selector: 'angular-chart',
templateUrl: 'chart.html',
providers: [ng.http.HTTP_PROVIDERS]
}).Class({
constructor: [ng.http.Http, function(http){
var chartComponent = this;
this.selectedYear = 2014;
http.get('config.json')
.map(function(data){ return data.json(); })
.subscribe(function(json){
chartComponent.config = json;
chartComponent.initChart(json)
})
}],
initChart: function(config){
config.dataSource.data = config.dataSource.dataSet["2014"];
var revenueChart = FusionCharts.ready(function(){
new FusionCharts(config).render();
});
},
yearChange: function(year) {
var revenueChart = FusionCharts.items['revenue-chart'];
var chartJson = revenueChart.getChartData('json');
chartJson.data = this.config.dataSource.dataSet[year];
revenueChart.setChartData(chartJson);
this.selectedYear = year;
}
});
document.addEventListener('DOMContentLoaded', function() {
ng.platform.browser.bootstrap(chartApp.AppComponent);
});
})(window.chartApp || (window.chartApp = {}));
.container {
width: 555px;
margin: 25px auto;
font-family: 'Source Sans Pro', sans-serif;
text-align: center;
border: 2px solid #bbb;
border-radius: 2px;
}
.actions {
margin: 0 0 10px 0;
font-size: 16px;
display: inline-block;
}
button {
background-color: white;
border: 1px solid #7fb9e0;
padding: 5px 10px;
cursor: pointer;
width: 80px;
font-size: 14px;
}
.selected {
color: #fff;
background-color:#7fb9e0;
}
Code demonstrating how to create a simple chart component in Angular 2 using the FusionCharts library and plain JavaScript.
Article URL: https://www.sitepoint.com/chart-component-angular2-fusioncharts
Data source: WikiPedia pages of respective companies.
<div class="container">
<h1>Revenue of Top Tech Companies</h1>
<div class="actions">
<button (click)="yearChange(2014)" [ngClass] = "{selected: selectedYear== 2014}">2014</button>
<button (click)="yearChange(2015)" [ngClass] = "{selected: selectedYear== 2015}">2015</button>
</div>
<div id ="chart-container"></div>
</div>
{
"type": "column2d",
"renderAt": "chart-container",
"width": "550",
"height": "400",
"dataFormat": "json",
"id": "revenue-chart",
"dataSource": {
"chart": {
"yAxisName": "Revenue (In USD Billion)",
"yAxisMaxValue": "200",
"numberPrefix": "$",
"paletteColors": "#0075c2",
"bgColor": "#ffffff",
"showBorder": "0",
"showCanvasBorder": "0",
"plotBorderAlpha": "10",
"usePlotGradientColor": "0",
"plotFillAlpha": "50",
"showXAxisLine": "1",
"axisLineAlpha": "25",
"divLineAlpha": "10",
"showValues": "1",
"showLabels": "0",
"showAlternateHGridColor": "0",
"plotSpacePercent": "10",
"chartBottomMargin": "50",
"baseFont": "Source Sans Pro",
"baseFontSize": "16",
"toolTipColor": "#ffffff",
"toolTipBorderThickness": "0",
"toolTipBgColor": "#000000",
"toolTipBgAlpha": "80",
"toolTipBorderRadius": "2",
"toolTipPadding": "10"
},
"dataSet": {
"2014": [{
"label": "Amazon",
"value": "88.99"
}, {
"label": "Apple",
"value": "182.8"
}, {
"label": "Facebook",
"value": "12.47"
}, {
"label": "Google",
"value": "65.67"
}, {
"label": "Microsoft",
"value": "86.83"
}],
"2015": [{
"label": "Amazon",
"value": "107.01"
}, {
"label": "Apple",
"value": "233.72"
}, {
"label": "Facebook",
"value": "17.93"
}, {
"label": "Google",
"value": "74.54"
}, {
"label": "Microsoft",
"value": "93.58"
}]
},
"annotations": {
"groups": [{
"id": "logo-images",
"xScale": "30",
"yScale": "30",
"showBelow": "0",
"items": [{
"type": "image",
"url": "https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/06/1465735364amazon.jpg",
"x": "$dataset.0.set.0.startx + 25",
"y": "$dataset.0.set.0.endY + 10"
}, {
"type": "image",
"url": "https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/06/1465735362apple.jpg",
"x": "$dataset.0.set.1.startx + 85",
"y": "$dataset.0.set.1.endY + 10"
}, {
"type": "image",
"url": "https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/06/1465735369facebook.jpg",
"x": "$dataset.0.set.2.startx + 20",
"y": "$dataset.0.set.2.endY + 10"
}, {
"type": "image",
"url": "https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/06/1465735358google.jpg",
"x": "$dataset.0.set.3.startx + 5",
"y": "$dataset.0.set.3.endY + 5"
}, {
"type": "image",
"url": "https://dab1nmslvvntp.cloudfront.net/wp-content/uploads/2016/06/1465735372microsoft.jpg",
"x": "$dataset.0.set.4.startx + 30",
"y": "$dataset.0.set.4.endY + 10"
}]
}]
}
}
}