You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于v-model状态动态显示文本框Tooltip的实现问题

解决方案

你的需求是文本框为空时显示占位符,有输入时hover显示Tooltip,原代码的问题在于将v-tooltip作为v-text-field的子元素,结合v-if会导致激活器绑定异常,因为v-text-field的内部插槽并非放置Tooltip的正确位置。

下面提供两种可行的实现方式:

方式一:Tooltip包裹文本框,动态控制激活状态

通过v-slot:activator绑定文本框作为Tooltip的触发元素,同时通过计算属性控制Tooltip仅在输入内容存在时响应hover:

<template>
  <v-tooltip
    v-model="isTooltipActive"
    location="start"
  >
    <template v-slot:activator="{ on, attrs }">
      <v-text-field
        v-model="model_text"
        placeholder="My Label"
        hide-details
        v-bind="attrs"
        v-on="on"
      />
    </template>
    My Label
  </v-tooltip>
</template>

<script>
export default {
  data() {
    return {
      model_text: '',
      _tooltipHovered: false
    };
  },
  computed: {
    isTooltipActive: {
      get() {
        // 仅当输入内容存在且鼠标hover时激活Tooltip
        return this.model_text && this._tooltipHovered;
      },
      set(val) {
        this._tooltipHovered = val;
      }
    }
  }
};
</script>

方式二:分离Tooltip与文本框,通过ref绑定激活器

将Tooltip与文本框分开,用ref指定触发元素,通过v-show控制Tooltip仅在有输入时可见:

<template>
  <div>
    <v-text-field
      v-model="model_text"
      placeholder="My Label"
      hide-details
      ref="textField"
    />

    <v-tooltip
      v-show="model_text"
      activator="ref:textField"
      location="start"
    >
      My Label
    </v-tooltip>
  </div>
</template>

<script>
export default {
  data() {
    return {
      model_text: ''
    };
  }
};
</script>

两种方式都能实现需求:输入为空时显示占位符,有内容后hover文本框会触发Tooltip显示标签。

内容的提问来源于stack exchange,提问作者Giulio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:43:23