From 34a31d429f6d21795b09542029bb80b536bc18d5 Mon Sep 17 00:00:00 2001 From: philip ross Date: Mon, 2 Apr 2018 11:42:52 +0100 Subject: [PATCH] fix: Remove event listeners on component destroy --- components/drawer/mdc-drawer.vue | 22 ++++-- components/slider/mdc-slider.vue | 8 ++- components/snackbar/mdc-snackbar.vue | 103 ++++++++++++++++----------- 3 files changed, 84 insertions(+), 49 deletions(-) diff --git a/components/drawer/mdc-drawer.vue b/components/drawer/mdc-drawer.vue index 62215e12..5e95cd28 100644 --- a/components/drawer/mdc-drawer.vue +++ b/components/drawer/mdc-drawer.vue @@ -141,16 +141,16 @@ export default { }, mounted() { if (this.toggleOn) { - let source = this.toggleOnSource || eventBus; - source.$on(this.toggleOn, () => this.toggle()); + this.toggleOnEventSource = this.toggleOnSource || eventBus; + this.toggleOnEventSource.$on(this.toggleOn, this.toggle); } if (this.openOn) { - let source = this.openOnSource || eventBus; - source.$on(this.openOn, () => this.open()); + this.openOnEventSource = this.openOnSource || eventBus; + this.openOnEventSource.$on(this.openOn, this.open); } if (this.closeOn) { - let source = this.closeOnSource || eventBus; - source.$on(this.closeOn, () => this.close()); + this.closeOnEventSource = this.closeOnSource || eventBus; + this.closeOnEventSource.$on(this.closeOn, this.close); } media.small.addListener(this.refreshMedia); media.large.addListener(this.refreshMedia); @@ -159,6 +159,16 @@ export default { beforeDestroy() { media.small.removeListener(this.refreshMedia); media.large.removeListener(this.refreshMedia); + + if (this.toggleOnEventSource) { + this.toggleOnEventSource.$off(this.toggleOn, this.toggle); + } + if (this.openOnEventSource) { + this.openOnEventSource.$off(this.openOn, this.open); + } + if (this.closeOnEventSource) { + this.closeOnEventSource.$off(this.closeOn, this.close); + } }, }; diff --git a/components/slider/mdc-slider.vue b/components/slider/mdc-slider.vue index caff6482..cb33f6a9 100644 --- a/components/slider/mdc-slider.vue +++ b/components/slider/mdc-slider.vue @@ -174,11 +174,15 @@ export default { eventBus.$on('mdc:layout', this.layout); if (this.layoutOn) { - let source = this.layoutOnSource || this.$root; - source.$on(this.layoutOn, this.layout); + this.layoutOnEventSource = this.layoutOnSource || this.$root; + this.layoutOnEventSource.$on(this.layoutOn, this.layout); } }, beforeDestroy() { + eventBus.$off('mdc:layout', this.layout); + if (this.layoutOnEventSource) { + this.layoutOnEventSource.$off(this.layoutOn, this.layout); + } this.foundation.destroy(); }, }; diff --git a/components/snackbar/mdc-snackbar.vue b/components/snackbar/mdc-snackbar.vue index 5ed34baf..7a20f267 100644 --- a/components/snackbar/mdc-snackbar.vue +++ b/components/snackbar/mdc-snackbar.vue @@ -11,82 +11,103 @@