Skip to content

Commit 18081de

Browse files
committed
fix: Properly clear event listeners on component unmounts (#302)
1 parent a16c9ac commit 18081de

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

src/VueDatePicker/VueDatePicker.vue

+1
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@
450450
}
451451
clearInternalValues();
452452
emit('blur');
453+
dpMenuRef.value?.$el?.remove();
453454
}
454455
};
455456

src/VueDatePicker/components/ActionRow.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
</template>
6969

7070
<script lang="ts" setup>
71-
import { computed, onMounted, onUnmounted, ref } from 'vue';
71+
import { computed, onUnmounted, onMounted, ref } from 'vue';
7272
7373
import { checkKeyDown, convertType, unrefElement } from '@/utils/util';
7474
import { useArrowNavigation, useDefaults, useValidation } from '@/composables';

src/VueDatePicker/components/DatepickerMenu.vue

+9-9
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,14 @@
205205
const dynCmpRef = ref<any>(null);
206206
const isMenuActive = ref(false);
207207
208+
const stopDefault = (event: Event) => {
209+
isMenuActive.value = true;
210+
if (defaultedConfig.value.allowPreventDefault) {
211+
event.preventDefault();
212+
}
213+
checkStopPropagation(event, defaultedConfig.value, true);
214+
};
215+
208216
onMounted(() => {
209217
if (!props.shadow) {
210218
menuMount.value = true;
@@ -229,7 +237,7 @@
229237
document.removeEventListener('mousedown', handleClickOutside);
230238
231239
const menu = unrefElement(dpMenuRef);
232-
240+
233241
if (menu) {
234242
menu.removeEventListener('pointerdown', stopDefault);
235243
menu.removeEventListener('mousedown', stopDefault);
@@ -306,14 +314,6 @@
306314
}),
307315
);
308316
309-
const stopDefault = (event: Event) => {
310-
isMenuActive.value = true;
311-
if (defaultedConfig.value.allowPreventDefault) {
312-
event.preventDefault();
313-
}
314-
checkStopPropagation(event, defaultedConfig.value, true);
315-
};
316-
317317
const handleDpMenuClick = (ev: Event) => {
318318
checkStopPropagation(ev, defaultedConfig.value, true);
319319
};

src/VueDatePicker/directives/clickOutside.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const useEventListener = (
3333
(el) => {
3434
cleanup();
3535
if (!el) return;
36-
36+
el.removeEventListener(event, listener);
3737
el.addEventListener(event, listener, options);
3838

3939
cleanup = () => {

0 commit comments

Comments
 (0)