angular下是否可以不用this而指向当前实例

问题

用addEventListener绑定事件后,messageListener内的this指向改变为window,导致 this.showPreview = false;执行错误。如何重新获取当前实例?
(不能在ngOnInit里使用bind(this),因为使用后removeEventListener会失效)

代码

    ngOnInit(): void {
        window.addEventListener('message', this.messageListener);
    }
    messageListener(e) {
        this.showPreview = false;
    }
    ngOnDestroy() {
        window.removeEventListener('message', this.messageListener);
    }
阅读 2.9k
1 个回答

可以用lambda表达式,比如

ngOnInit(): void {
    window.addEventListener('message', 
    e=>{
        this.messageListener(e);
    });
}

但是,angular不应该直接使用window对象注册原生事件,而应该使用@HostListener('window:message',['$event'])

ngOnInit(): void {
}
@HostListener('window:message',['$event'])  
messageListener(event) {
    this.showPreview = false;
}