Javascript 将范围从窗口更改为角度视图
我必须与使用iframe的供应商集成。JS侦听iframe发出的事件。在我的Angular component.ts中,我有:Javascript 将范围从窗口更改为角度视图,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,我必须与使用iframe的供应商集成。JS侦听iframe发出的事件。在我的Angular component.ts中,我有: ngOnInit() { let listener = window.addEventListener ? "addEventListener" : "attachEvent"; let listen = window[listener]; let messageEvent = listener == "attachEvent" ? "onmessage" : "
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
}
问题是,调用此.processMessage()时,我会收到一个错误:
ERROR TypeError: this.processMessage is not a function
我知道这是一个范围问题,因为“this”的范围现在是窗口。处理这种情况的最佳方法是什么
是
es6是否接受listen()之外的内容 您不必手动创建中间变量,当您使用箭头函数时,TypeScript会为您创建中间变量:
listen(messageEvent, (e) => {
if (e.origin == 'someURL') {
console.log(e.data)
this.doStuff(e.data);
}
}, false);
在后台,它会做完全相同的事情,在编译到不支持箭头函数的目标时创建一个名为
\u this
的变量。您不必手动创建中间变量,当您使用箭头函数时,TypeScript会为您做这件事:
listen(messageEvent, (e) => {
if (e.origin == 'someURL') {
console.log(e.data)
this.doStuff(e.data);
}
}, false);
在后台,当编译到不支持箭头函数的目标时,它会创建一个名为\u this
的变量,从而执行完全相同的操作