fix(components): work around #6378 (#6380)

This commit is contained in:
Carter Li
2022-03-02 23:08:28 +08:00
committed by GitHub
parent 6c5668a4d3
commit 8a80bfea0c

View File

@@ -31,17 +31,28 @@
@mouseenter="onContentEnter"
@mouseleave="onContentLeave"
>
<slot />
<el-visually-hidden :id="id" role="tooltip">
{{ ariaLabel }}
</el-visually-hidden>
<!-- Workaround bug #6378 -->
<template v-if="!destroyed">
<slot />
<el-visually-hidden :id="id" role="tooltip">
{{ ariaLabel }}
</el-visually-hidden>
</template>
</el-popper-content>
</transition>
</teleport>
</template>
<script lang="ts">
import { computed, defineComponent, inject, ref, unref, watch } from 'vue'
import {
computed,
defineComponent,
inject,
onBeforeUnmount,
ref,
unref,
watch,
} from 'vue'
import { onClickOutside } from '@vueuse/core'
import { ElPopperContent } from '@element-plus/components/popper'
import { ElVisuallyHidden } from '@element-plus/components/visual-hidden'
@@ -64,6 +75,7 @@ export default defineComponent({
const intermediateOpen = ref(false)
const entering = ref(false)
const leaving = ref(false)
const destroyed = ref(false)
const {
controlled,
id,
@@ -85,6 +97,10 @@ export default defineComponent({
return props.persistent
})
onBeforeUnmount(() => {
destroyed.value = true
})
const shouldRender = computed(() => {
return unref(persistentRef) ? true : unref(open)
})
@@ -121,11 +137,11 @@ export default defineComponent({
const onBeforeEnter = () => {
contentRef.value?.updatePopper?.()
onBeforeShow()
onBeforeShow?.()
}
const onBeforeLeave = () => {
onBeforeHide()
onBeforeHide?.()
}
const onAfterShow = () => {
@@ -167,6 +183,7 @@ export default defineComponent({
intermediateOpen,
contentStyle,
contentRef,
destroyed,
shouldRender,
shouldShow,
open,