risposta da @ haz111 funziona già, ma solo nel caso in cui si vuole fare lettore di file un componente riutilizzabile, si potrebbe usare questo o meglio: migliorare su questo:
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)" />
uso in altri file
unaltrofile Diciamo 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>
ReadThis (InputValue: eventuali): void {var di file : File = InputValue.file [0]; var myReader: FileReader = new FileReader(); ... funziona anche ... ho pensato sembra più pulito .. un grande aiuto però grazie – user3124360
@ user3124360 - giusto, l'ho cambiato. Grazie! – haz111
Funziona, va bene, ma vorrei aggiungere qualcosa. Per qualche ragione (almeno nel mio caso) questo non funziona se fai tutto il lavoro solo nel metodo 'changeListener'. Per qualche ragione (che non so) se si utilizza "myReader.onloadend (...)" in changeListener, non verrà mai attivato. –