【问题标题】:get the value from a FileReader in Angular 2从 Angular 2 中的 FileReader 获取值
【发布时间】:2016-10-11 14:36:52
【问题描述】:

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

    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 函数之外得到结果

【问题讨论】:

    标签: angular typescript filereader


    【解决方案1】:

    问题是这样做时上下文会丢失:

    reader.onload = this.onLoadCallback;
    

    一种解决方案是:

    reader.onload = (e: Event) => {
        this.onLoadCallback(e);
    }
    

    另一个是:

    reader.onload = this.onLoadCallback.bind(this);
    

    还有一个是:

    onLoadCallback = (event) => {
        this.csvChange.emit((event.target as FileReader).result);
    }
    

    底线。确保this 上下文始终保留在您的class 中。

    【讨论】:

    • 优秀的实现——特别喜欢第二种解决方案。谢谢
    • 我尝试使用 event.target.result 并一直显示错误,直到我将其更改为 event.target["result"]。谢谢!
    • @Akhil 那是因为event.target 被键入为EventTarget 并且它没有result 属性。您应该首先将其转换为 FileReader,例如:(event.target as FileReader).result
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多