代码之家  ›  专栏  ›  技术社区  ›  Anthony

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

  •  0
  • Anthony  · 技术社区  · 7 年前

    我必须与使用iframe的供应商集成。JS侦听iframe发出的事件。在我的角度分量中。我有:

    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()被称为I get a error:

    ERROR TypeError: this.processMessage is not a function
    

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

     let that = this 
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Fenton    7 年前

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

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

    在后台,它通过创建一个名为 _this