2017-10-16 8 views
0

iframeを使用するベンダーと統合する必要があります。 JSは、iframeから発行されたイベントをリッスンします。私の角度component.tsでは、私が持っている:範囲をウィンドウからアングルに変更

ngOnInit() { 
let listener = window.addEventListener ? "addEventListener" : "attachEvent"; 
let listen = window[listener]; 
let messageEvent = listener == "attachEvent" ? "onmessage" : "message"; 
listen(messageEvent, function(e) { 
    if (e.origin == 'someURL') { 
    console.log(e.data) 
    this.doStuff(e.data); 
    } 
}, false); 
} 

doStuff(data){ 
//do stuff 
} 

問題がthis.processMessage()が呼び出されたとき、私はエラーを取得することです:

ERROR TypeError: this.processMessage is not a function 

私は、これはスコープ以来、スコープの問題である知っています「this」は今のウィンドウです。この状況を処理する最善の方法は何ですか?

はES6と許容聞くの

let that = this 

外()ですか?

答えて

2

あなたは活字体を使用すると、矢印の機能を使用する場合、あなたのためにすることを行い、手動で中間変数を作成する必要はありません。バックグラウンドで

listen(messageEvent, (e) => { 
    if (e.origin == 'someURL') { 
    console.log(e.data) 
    this.doStuff(e.data); 
    } 
}, false); 

を、それが作成することにより、まったく同じことを行います矢印関数をサポートしていないターゲットにコンパイルするときは、_thisという名前の変数があります。