答案已經工作,但以防萬一你想使文件閱讀器可重用的組件,你可能使用或更好:改善這一點:
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)" />
使用在其他文件中
anotherfile可以說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將:任意):文件上傳庫我的上傳處理函數void { var文件:文件= inputValue的。文件[0]; var myReader:FileReader = new FileReader(); ...的工作原理以及..我認爲看起來更清潔..很大的幫助,雖然謝謝 – user3124360
@ user3124360 - 對,我改變了它。謝謝! – haz111
這工作,很好,但我想補充一些東西。出於某種原因(至少在我的情況下),如果你只用'changeListener'方法完成所有工作,這就不會奏效。出於某種原因(我不知道)如果你在changeListener中使用'myReader.onloadend(...)',它將不會被解僱。 –