fix(ui): avoid dropdown open updates during unmount

This commit is contained in:
Scars 2026-06-19 23:49:33 +08:00 committed by GitHub
parent 92d3f64eae
commit 6db8607bf2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 8 additions and 1 deletions

View File

@ -89,6 +89,7 @@ const internalOpen = ref(false);
const x = ref(0);
const y = ref(0);
const minWidth = ref(0);
let listenersAttached = false;
const isOpen = computed(() => props.open ?? internalOpen.value);
@ -108,10 +109,12 @@ function setOpen(value: boolean) {
}
function removeMenuListeners() {
if (!listenersAttached) return;
document.removeEventListener("pointerdown", onOutsidePointerDown, true);
document.removeEventListener("keydown", onKeydown);
window.removeEventListener("scroll", close, true);
window.removeEventListener("resize", close);
listenersAttached = false;
}
function close() {
@ -152,10 +155,12 @@ function openMenu() {
updatePosition();
setOpen(true);
nextTick(fitPositionToViewport);
removeMenuListeners();
document.addEventListener("pointerdown", onOutsidePointerDown, true);
document.addEventListener("keydown", onKeydown);
window.addEventListener("scroll", close, true);
window.addEventListener("resize", close);
listenersAttached = true;
}
function toggle() {
@ -227,7 +232,9 @@ function selectItem(item: LightDropdownMenuItem) {
}
}
onBeforeUnmount(close);
onBeforeUnmount(() => {
removeMenuListeners();
});
watch(
() => props.open,