odpowiedź od @ haz111 już działa, ale tylko w przypadku, gdy chcesz, aby czytelnik plik komponent wielokrotnego użytku, można ewentualnie użyć tego czy lepiej: poprawić to:
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)" />
Wykorzystanie w innych plikach
anotherfile powiedzmy 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 (Wartość wejściowa: dowolny): void {var plików : file = Wartość wejściowa.pliki [0]; var myReader: FileReader = new FileReader(); ... działa również ... myślę, że wygląda bardziej czysto .. wielka pomoc choć dzięki – user3124360
@ user3124360 - tak, zmieniłem to. Dzięki! – haz111
To działa dobrze, ale chciałbym coś dodać. Z jakiegoś powodu (przynajmniej w moim przypadku) to nie zadziała, jeśli wykonasz całą pracę tylko w metodzie "changeListener". Z jakiegoś powodu (co nie wiem), jeśli użyjesz "myReader.onloadend (...)" w changeListener, to nigdy nie zostanie uruchomiony. –