Skip to content

在antd-vue的table组件中封装tooltip组件

使用场景

当表格中某些字段的数据文本过长时

具体实现

vue
<!-- ShowTooltip.vue -->
<template>
    <a-tooltip placement="top" trigger="hover" overlayClassName="table-class" v-model:visible="isShow">
        <template #title>
            <span>{{ content }}</span>
        </template>
        <div class="content" @mouseleave="mouseleave">
            <span ref="contentRef">
                <slot></slot>
            </span>
        </div>
    </a-tooltip>
</template>

<script setup lang="ts">
interface Props {
    content: string
}
  
const props = withDefaults(defineProps<Props>(), {
    content: '',
})

const isShow = ref(false);
const contentRef = ref();
const isShowTooltip = ref(false);
const mouseleave = () => {
    // isShowTooltip.value = false
};

const mouseenter = () => {
    // 关键代码逻辑
    if (contentRef.value.parentNode.offsetWidth > contentRef.value.offsetWidth) {
        isShowTooltip.value = false;
    } else {
        isShowTooltip.value = true;
    }
};
</script>

<style scoped>
.content {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
</style>

使用

html
<!-- 如果配置了ellipsis,则自动显示tooltip -->
<ShowTooltip v-if="column.ellipsis" :content="text">{{ text }}</ShowTooltip>