我有以下组件加载文件并将其内容绑定为字符串
export class NgCsvComponent {
@Input() csv: any;
@Output() csvChange: any = new EventEmitter();
public localCsv : any = '';
constructor() { }
changeListener($event): void {
this.readFile($event.target);
}
readFile (inputValue : any) : void {
let reader = new FileReader (),
file : File = inputValue.files[0];
reader.readAsText(file);
reader.onload = this.onLoadCallback;
}
onLoadCallback (event) {
this.csvChange.emit(event.target["result"]);
}
}
问题是this.csvChange
中onLoadCallback
未定义,所以我如何将结果传递给组件中的某个变量?
我正在搜索其他类似的question,但从未在onloadCallback函数之外得到结果
答案 0 :(得分:7)
问题是当您执行以下操作时上下文丢失:
reader.onload = this.onLoadCallback;
一个解决方案是:
reader.onload = (e: Event) => {
this.onLoadCallback(e);
}
另一个是:
reader.onload = this.onLoadCallback.bind(this);
还有一个是:
onLoadCallback = (event) => {
this.csvChange.emit(event.target["result"]);
}
底线。确保this
上下文始终保留在class
。