answer from @haz111 already works, but just in case you want to make file reader a reusable component , you could possibly use this or better: improve on this:
inputfilereader.ts
import {Component, ElementRef, EventEmitter} from 'angular2/angular2'; @Component({ selector: 'filereader', templateUrl: './commons/inputfilereader/filereader.html', styleUrls: ['./commons/inputfilereader/filereader.css'], providers: [ElementRef], events : ['complete'] }) export class InputFileReader { complete :EventEmitter = new EventEmitter(); constructor(public elementRef: ElementRef) { } resultSet:any; // dont need it changeListener($event: any) { var self = this; var file:File = $event.target.files[0]; var myReader:FileReader = new FileReader(); myReader.readAsText(file); var resultSet = []; myReader.onloadend = function(e){ // you can perform an action with data read here // as an example i am just splitting strings by spaces var columns = myReader.result.split(/\r\n|\r|\n/g); for (var i = 0; i < columns.length; i++) { resultSet.push(columns[i].split(' ')); } self.resultSet=resultSet; // probably dont need to do this atall self.complete.next(self.resultSet); // pass along the data which would be used by the parent component }; } }
filereader.html
<input type="file" (change)="changeListener($event)" />
Usage in other files
anotherfile lets say dfs.ts
import {Component, ElementRef} from 'angular2/angular2'; import {InputFileReader} from '../../commons/inputfilereader/inputfilereader'; @Component({ selector: 'dfs', templateUrl: './components/dfs/dfs.html', styleUrls: ['./components/dfs/dfs.css'], providers: [ElementRef], directives:[InputFileReader] }) export class DfsCmp { constructor(public eleRef :ElementRef) {} callSomeFunc(data):void { console.log("I am being called with ", data); } }
dfs.html
<filereader (complete)="callSomeFunc($event)"></filereader>