我必须与使用iframe的供应商集成。 JS侦听iframe发出的事件。在我的Angular组件中,我有:
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之外可以接受listen()吗?
答案 0 :(得分:2)
您不必手动创建中间变量,TypeScript会在您使用箭头功能时为您执行此操作:
listen(messageEvent, (e) => {
if (e.origin == 'someURL') {
console.log(e.data)
this.doStuff(e.data);
}
}, false);
在后台,通过在编译到不支持箭头功能的目标时创建名为_this
的变量,它完全相同。