2017-10-16 76 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 

我知道這是因爲該範圍的範圍問題'這'現在是窗口。處理這種情況的最佳方法是什麼?

let that = this 

外的聽()與ES6接受嗎?

回答

2

您不必手動創建一箇中間變量,打字稿會替你當你使用箭頭功能:

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

在後臺,它完全一樣的東西,通過創建編譯爲不支持箭頭功能的目標時名稱爲_this的變量。