(改变)听众的替代方案?

时间:2018-04-20 10:26:46

标签: angular typescript listener event-listener

所以我想创建一个网页,我可以上传excel(xlsx)文件,然后将其数据显示到页面。我能够通过使用xlsx库实现这一目标。但现在的问题是,如果我上传一个excel文件,然后通过ms excel编辑其数据,然后再次在页面上传,我对该文件所做的编辑将不会显示在页面上。它仍显示我尚未编辑文件时的数据。 这是我的组件代码.ts

data: AOA = [ [], [] ];     
reader: FileReader = new FileReader();
    onFileChange(evt: any) {
        //this._router.navigate(['']);
        /* wire up file reader */
        console.log('HERE');
        const target: DataTransfer = <DataTransfer>(evt.target);
        if (target.files.length !== 1) throw new Error('Cannot use multiple files');
        this.reader.onload = (e: any) => {
        /* read workbook */
        this.data = [ [], [] ];
        console.log(this.data);
        const bstr: string  = e.target.result;
        const wb: XLSX.WorkBook = XLSX.read(bstr, {type: 'binary'});
        /* grab first sheet */
        const wsname: string = wb.SheetNames[0];
        const ws: XLSX.WorkSheet = wb.Sheets[wsname];
        /* save data */
        this.data = <AOA>(XLSX.utils.sheet_to_json(ws, {header: 1}));
        console.log(this.data);
        }
        this.reader.readAsBinaryString(target.files[0]);
    }

这是我在component.html中显示数据的代码

<div>
  <input type="file" (change)="onFileChange($event)" name="fileUploaded" value="Choose a File" accept=".xlsx, .xls">
  <br>
  <table class="sjs-table table table-striped">
      <tr *ngFor="let row of data">
        <td *ngFor="let val of row">
          {{val}}
        </td>
      </tr>
  </table>
  <input (click)="export()" type="submit" id="exportButton" value="Export">
</div>

我尝试调试它,发现问题是(更改)侦听器。它不会执行onFileChange($ event),除非我上传的文件确实已更改。我尝试研究变革听众的替代方案,但我没有找到任何东西。你们知道另一种选择吗?或者你能建议我做什么?我应该改变上传文件的方式吗?

我目前正在使用Angular CLI:1.7.4;节点:8.11.1; Typescritp:2.8.1希望有人可以提供帮助。

0 个答案:

没有答案