var app = angular.module('testApp', ['tld.csvDownload']);
app.controller('Ctrl1', function($scope, $rootScope) {
$scope.data = {};
$scope.data.exportFilename = 'JetsonData.csv';
$scope.data.displayLabel = 'Download Jetson CSV';
$scope.data.myHeaderData = {
id: 'User ID',
name: 'User Name (Last, First)',
alt: 'Nickname'
};
$scope.data.myInputArray = [{
id: '0001',
name: 'Jetson, George'
}, {
id: '0002',
name: 'Jetson, Jane',
alt: 'Jane, his wife.'
}, {
id: '0003',
name: 'Jetson, Judith',
alt: 'Daughter Judy'
}, {
id: '0004',
name: 'Jetson, Elroy',
alt: 'Boy Elroy'
}, {
id: 'THX1138',
name: 'Rosie The Maid',
alt: 'Rosie'
}];
});
<!DOCTYPE html>
<!-- cpy of this fiddle, since my workplace seems to prevent jsfiddles from running -->
<!-- http://jsfiddle.net/mbielski/m8saa/ -->
<html ng-app="testApp">
<head>
<meta charset="utf-8" />
<title>Exporting JSON as a CSV</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.min.js"></script>
<script src="csv-download.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div>Using an <a href="https://github.com/pcimino/csv-download" target="_blank">Angular directive for exporting JSON data as a CSV download.</a></div>
<div ng-controller="Ctrl1">
<h2>All Attributes Set</h2>
<csv-download
filename="{{data.exportFilename}}"
label="{{data.displayLabel}}"
column-header="data.myHeaderData"
input-array="data.myInputArray">
</csv-download>
<hr />
<h2>Only Required Attribute Set</h2>
<h3>Optional Attributes Default</h3>
<csv-download
input-array="data.myInputArray">
</csv-download>
</div>
</body>
</html>
/* Put your css in here */
!function(){"use strict";angular.module("tld.csvDownload",[]).directive("csvDownload",[]).config(["$compileProvider",function($compileProvider){$compileProvider.aHrefSanitizationWhitelist(/^\s*(data):/)}]),angular.module("tld.csvDownload").directive("csvDownload",function($log){var directive={restrict:"E",transclude:!0,template:'<a href="{{hreflink}}" download="{{filename}}">{{label}}</a>',scope:{columnHeader:"=",inputArray:"=",filename:"@filename",hreflink:"@hreflink",label:"@label"}};return directive.controller=function($scope){void 0===$scope.label&&($scope.label="Download Data");var getHeader=function(){if($scope.columnHeader)return $scope.columnHeader;$scope.columnHeader=[];for(var i in $scope.inputArray){var keys=Object.keys($scope.inputArray[i]);for(var j in keys){var key=keys[j];$scope.columnHeader[key]=key}}return $scope.columnHeader},convertArrayOfObjectsToCSV=function(){var result,ctr,keys,columnDelimiter,lineDelimiter,header=getHeader()||null;return null===header?null:(columnDelimiter=",",lineDelimiter="\n",keys=Object.keys(header),result="",keys.forEach(function(key){var dataVal=header[key];void 0===dataVal&&(dataVal=""),result+='"'+dataVal+'"'+columnDelimiter}),result+=columnDelimiter,result+=lineDelimiter,$scope.inputArray.forEach(function(item){ctr=0,keys.forEach(function(key){ctr>0&&(result+=columnDelimiter);var dataVal=item[key];void 0===dataVal&&(dataVal=""),result+='"'+dataVal+'"',ctr++}),result+=lineDelimiter}),result)},generateCSVLink=function(){void 0===$scope.filename&&($scope.filename="export.csv");var csv=convertArrayOfObjectsToCSV();null!==csv&&(csv.match(/^data:text\/csv/i)||(csv="data:text/csv;charset=utf-8,"+csv),$scope.hreflink=encodeURI(csv))};generateCSVLink()},directive})}();