Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版

给选择器加上唯一key(下面的想看就看)

问题复现

需求是用一个下拉切换时间维度的选择,分别为年度、季度、月度,但是开发的时候发现,当切换的时候,视图可正常切换,但点击选择时却发现选择器跑到了左上角,代码和问题截图如下:

问题代码:

javascript 复制代码
      <el-form inline>
        <el-form-item label="统计维度">
          <el-select size="small" style="width: 80px;" v-model="timeCategory">
            <el-option :value="item.value" :label="item.label" v-for="item in timeCategoryOption"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="timeCategory===0" label="年度选择">
          <el-date-picker type="year" format="yyyy年" value-format="yyyy-01-01 00:00:00, yyyy-12-31 23:59:59" v-model="topChooseTime" style="width: 150px;" size="small"></el-date-picker>
        </el-form-item>
        <el-form-item v-if="timeCategory===1" label="季度选择">
          <el-select v-model="topChooseTime">
            <el-option :value="item.value" :label="item.label" v-for="item in quarterOption"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="timeCategory===2" label="月度选择">
          <el-date-picker type="monthrange" value-format="yyyy-MM-dd" v-model="topChooseTime" style="width: 180px;" size="small"></el-date-picker>
        </el-form-item>
      </el-form>

BUG产生原因及思路:

  • 原来想着这样的原因可能是v-if导致的,我们知道v-if是操作dom树进行显示/隐藏的控制,切换为另一个组件时我想可能是找不到ref或者id之类的东西,所以改成v-show。
  • 但是尝试发现,改成v-show确实能够解决位置偏移问题,但由于共用了一个绑定值,并且切换时是不同的组件类型,elementUI封装的一些方法会找不到报错,所以改成v-show对于我这种情况不可行。
  • 后来查找资料发现,可以给选择器加一个唯一的key,即可解决这个问题,代码如下:
javascript 复制代码
      <el-form inline>
        <el-form-item label="统计维度">
          <el-select size="small" style="width: 80px;" v-model="timeCategory">
            <el-option :value="item.value" :label="item.label" v-for="item in timeCategoryOption"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="timeCategory===0" label="年度选择">
          <el-date-picker type="year" key="yearSelect" format="yyyy年" value-format="yyyy-01-01 00:00:00, yyyy-12-31 23:59:59" v-model="topChooseTime" style="width: 150px;" size="small"></el-date-picker>
        </el-form-item>
        <el-form-item v-if="timeCategory===1" label="季度选择">
          <el-select v-model="topChooseTime" key="quarterSelect">
            <el-option :value="item.value" :label="item.label" v-for="item in quarterOption"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="timeCategory===2" label="月度选择">
          <el-date-picker type="monthrange" key="monthrange" value-format="yyyy-MM-dd" v-model="topChooseTime" style="width: 180px;" size="small"></el-date-picker>
        </el-form-item>
      </el-form>
相关推荐
Larry_Yanan10 小时前
QML面试常见问题(一)QML中组件呈现方式的方法有哪些
开发语言·c++·qt·ui·面试
测试员周周13 小时前
【Appium 系列】第12节-智能路由 — API测试 vs UI 测试的自动选择
开发语言·人工智能·python·功能测试·ui·appium·测试用例
BU摆烂会噶14 小时前
【LangGraph】节点内调用与状态隔离
android·人工智能·python·ui·langchain·人机交互
努力努力再努力wz15 小时前
【C++高阶数据结构系列】:时间轮定时器详解:原理分析与代码实现,带你从零手撕时间轮!(附时间轮的实现源码)
c语言·开发语言·数据结构·c++·qt·算法·ui
ZC跨境爬虫15 小时前
跟着 MDN 学 HTML day_58:(构建行星数据表——HTML表格高级实战指南)
前端·javascript·ui·html·音视频
BU摆烂会噶15 小时前
【LangGraph】作为节点添加与状态共享
android·人工智能·python·ui·langchain·人机交互
ZC跨境爬虫17 小时前
跟着 MDN 学 HTML day_60:(表单与按钮技能测试实战)
服务器·前端·javascript·数据库·ui·html
richard_yuu18 小时前
鸿蒙ArkUI组件化实战|公共组件封装、复用解耦与上架级UI规范落地
ui·华为·harmonyos
ZC跨境爬虫19 小时前
跟着 MDN 学 HTML day_59:HTML表单与按钮——构建用户交互的基石
前端·javascript·ui·html·交互·媒体
阿里巴巴淘系技术团队官网博客19 小时前
AI-Generated UI 技术深度解析:模型流式输出与 UI 渲染实践
人工智能·ui