Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将范围从窗口更改为角度视图_Javascript_Angular_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 将范围从窗口更改为角度视图

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" : "

我必须与使用iframe的供应商集成。JS侦听iframe发出的事件。在我的Angular 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
}
问题是,调用此.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
的变量,从而执行完全相同的操作