javascript - 将范围从窗口更改为 Angular View

标签 javascript angular typescript ecmascript-6

我必须与使用 iframe 的 vendor 集成。 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
}

问题是,当调用 this.processMessage() 时,我收到错误:

ERROR TypeError: this.processMessage is not a function

我知道这是一个范围问题,因为“this”的范围现在是窗口。处理这种情况的最佳方法是什么?

 let that = this 

除了listen()之外,es6可以接受吗?

最佳答案

您不必手动创建中间变量,当您使用箭头函数时,TypeScript 会为您完成此操作:

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

在后台,它通过在编译到不支持箭头函数的目标时创建一个名为 _this 的变量来执行完全相同的操作。

关于javascript - 将范围从窗口更改为 Angular View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46777392/

相关文章:

javascript - 遍历同一类的div

javascript - 如何通过按钮切换表单?

javascript - FormBuilder - 自定义验证器 - 许多字段和 promise

javascript - 在 Firestore 中创建分页时间查询

javascript - 将 slider 箭头转换为点 slider

angular - 保留未分配的 Angular 组件 @Input

Angular ContentChildren(Component) 获取任何类型

angular - 如何使用 ionic-3 中的表单数据对图像文件发出发布请求

javascript - 我的 Angular2+ 应用程序中的所有组件/模块现在都出现错误,错误代码为 "No provider for Router"

TypeScript 泛型函数重载和/或类型保护