从Angular 2中的FileReader获取值

时间:2016-10-11 14:36:53

标签: angular typescript filereader

我有以下组件加载文件并将其内容绑定为字符串

    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.csvChangeonLoadCallback未定义,所以我如何将结果传递给组件中的某个变量?

我正在搜索其他类似的question,但从未在onloadCallback函数之外得到结果

1 个答案:

答案 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