2017-01-19 4 views
4

+ FileReader.onLoad =プロパティが存在しないとonloadイベントが呼び出されたときには、その後、ローカルのテキストファイル、 を読み取るためにreadAsText()非同期メソッドです、私は私のファイルを読み取ろうと、私のソースコードは、次のようなものです:不動産「テキスト」はタイプ「FileReaderの」上に存在しないため、Angular2 +活字私は<strong>FileReaderのインターフェイス</strong>を使用しています

export class ReadFileComponent { 
    text: string; 

    readFile(): void { 
    let reader=new FileReader(); 
    reader.onload = function(e) { 
     this.text=reader.result; 
    } 
    reader.readAsText(file); 
    } 
} 

コンパイルが失敗した

私は誰かがこの種の問題を解決してくださいました

、これが原因のEventListenerインタフェースは、オブジェクトを受け入れないにあると思いますか?あなたは、コールバック内でthisを使用したい場合は、矢印の機能を使用し

答えて

19

おかげでみんなが、そうでなければ、あなたは定期的にJavaScriptを使用している

reader.onload = (e) => { 
    this.text=reader.result; 
} 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

+0

んが、それはにconsole.log(reader.result)で正常に動作しない、問題はである "これは" は、currentTargetプロパティは、タイプのEventTargetであることを意味し、 ReadFileComponent – da45

+2

そのため、 'function()'の代わりに '()=>'を使う必要があります。矢印関数は、コールバック内の 'this'が現在のクラスを指し続けるようにします。 –

+0

right ..多分[this](http://stackoverflow.com/questions/22939130/when-should-i-use-arrow-functions-in-ecmascript-6)はそれを明らかにするでしょう –

0

動作しません。ここに機能:

reader.onload = function(e) { 
     this.text=reader.result; 
    } 

thisはあなたのクラスではない関数に属しています。

矢印機能を

reader.onload = (e)=> { 
      this.text=reader.result; 
     } 

それとも

self = this; 
reader.onload = function(e) { 
     self.text=reader.result; 
    } 
関連する問題