2017-10-16 49 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的变量。