如何删除事件监听器

时间:2018-10-08 18:06:49

标签: typescript events ionic-framework server-sent-events

我正在使用Ionic构建应用程序,并且正在使用像这样的EventSources:

ionViewWillEnter() {
    this.uniqueDeviceID.get()
        .then((uuid: any) => {
            this.eventListener = this.events(uuid).addEventListener("message", function(e) {
                console.log(e);
            }, false);
        })
        .catch((error: any) => {
                console.log(error);
        });
}

events(uuid: any) {
    return new EventSource("http://url.com");
}

它工作正常,但是我想在再次离开视图时停止监听器-像这样:

ionViewWillLeave() {
    this.eventListener.removeEventListener("message", function(e) {
        console.log(e);
    }, false);
}

但是它不起作用。如何再次删除监听器?

1 个答案:

答案 0 :(得分:1)

您应该将创建的EventSource和回调存储在变量中。只有在这种情况下,您才能引用它们,这是删除侦听器所必需的, 例如:

ionViewWillEnter() {
    this.uniqueDeviceID.get()
        .then((uuid: any) => {
            var eventListener = function (e) { console.log(e) };
            var eventSource = this.events(uuid)
            eventSource.addEventListener("message", eventListener, false);
            // then you can
           eventSource.removeEventListener("message", eventListener, false);
        })
        .catch((error: any) => {
            console.log(error);
        });
}