UNPKG

angular-papa-promise

Version:

This module provides an AngularJS service wrapper for the PapaParse (http://papaparse.com/) CSV parsing library.

91 lines (65 loc) 3.48 kB
# angular-papa-promise This module provides an AngularJS service wrapper for the PapaParse (http://papaparse.com/) CSV parsing library so it can be injected via dependency injection. It uses promises instead of the default callback mechanism so you don't need to kick off the ```$digest``` cycle manually after parsing has finished. ## Installation ## Download **angular-papa-promise** to your project from github (https://github.com/of17/angular-papa-promise/blob/master/dist/angular-papa-promise.js) or add it via bower: ``` bower install --save angular-papa-promise ``` **angular-papa-promise** depends on the PapaParse library, so be sure to grab that one as well (which bower will take care of for you). ## Usage / Example## Once downloaded include PapaParse and **angular-papa-promise** in your HTML page ```html <script src="bower_components/papaparse/papaparse.js"></script> <script src="bower_components/angular-papa-promise/dist/angular-papa-promise.js"></script> ``` then reference the ```papa-promise``` sub-module in your module and have the injector inject the 'Papa' service into your controller, directive, etc. ```javascript angular.module('myapp', ['papa-promise']) ``` The sample code below demonstrates how to use the papa-promise service in a controller to parse CSV to JSON (and vice versa). ```javascript var app = angular.module('myapp', ['papa-promise']); function AppController(Papa) { function handleParseResult(result) { // do something useful with the parsed data } function handleParseError(result) { // display error message to the user } function parsingFinished() { // whatever needs to be done after the parsing has finished } function parseCSV(data) { Papa.parse(data) .then(handleParseResult) .catch(handleParseError) .finally(parsingFinished); } function jsonToCSV(json) { Papa.unparse(data) .then(handleParseResult) .catch(handleParseError) .finally(parsingFinished); } angular.extend(this, { parseCSV: parseCSV, jsonToCSV: jsonToCSV }); } AppController.$inject = ['Papa']; app.controller('AppController', AppController); ``` ## Handling parse errors ## PapaParse communicates parse errors via the ```errors``` property of the ```result``` object that's being passed to the ```complete``` callback function. Errors related to loading the CSV file via URL or FileAPI result in the ```error``` callback function being invoked. http://papaparse.com/docs#errors As a result you'll need to handle errors in the complete callback as well as in the error callback. ```angular-papa-promise``` by default sticks with this behavior but you can instruct it to reject the promise in case an error occurred by adding the ```rejectOnError``` flag to the configuration object. ```javascript Papa.parse(csv, { rejectOnError: true }) .then(handleParseResult) .catch(handleParseError); ``` ## Note ## **angular-papa-promise** does't support PapaParse's fancy features like worker threads or streaming. If you need these, you can grab the original PapaParse object via ```Papa.Papa``` and invoke ```parse``` and ```unparse``` on it directly. ```javascript var result = Papa.Papa.parse(csv, config); ``` For further details on the configuration options refer to the *Config Options* section of the PapaParse docs (http://papaparse.com/docs#config-details).