当前位置: 首页 > java >正文

el-tabs 切换时数据不更新的问题

最近业务需求,需要在页面中使用tabs,使用过程中出现tabs切换,数据不更新的问题,以下是思路和解决办法。

Vue 会追踪你在模板中绑定的数据,并在数据发生变化时重新渲染相应的部分。但在使用 el-tabs 时,有时切换 Tab 后,数据不会立即更新,原因是diff算法比对的过程红,会尽量复用dom节点,而vue的算法把切换前后的dom识别为同个dom,所以不更新。

为了确保 Tab 切换时能正确地触发重新渲染,我们要做的就是触发他的正确识别,然后正常渲染。

方法1:key 的使用

为 el-tabs 添加一个唯一的 key 属性。这样,当数据或组件改变时,Vue 将能够识别并重新渲染它。注意:key不要用index,最好是和业务相关的、动态生成的,防止前后key值一样达不到区分dom节点的目的。

<template><el-tabs v-model="activeTab"><el-tab-pane :label="'Tab 1'" :key="tab1Key"><!-- Tab 1 内容 --><div>{{ tab1Content }}</div></el-tab-pane><el-tab-pane :label="'Tab 2'" :key="tab2Key"><!-- Tab 2 内容 --><div>{{ tab2Content }}</div></el-tab-pane></el-tabs>
</template><script>
export default {data() {return {activeTab: 'Tab 1',tab1Key: 'tab1-' + Date.now(),tab2Key: 'tab2-' + Date.now(),tab1Content: null,  // 初始为nulltab2Content: null,  // 初始为null};},methods: {},created() {},
};
</script>
方法2:强制更新

使用 Vue 的 $forceUpdate 方法来强制组件重新渲染。但这种方法并不推荐,因为它绕过了 Vue 的正常更新机制。

方法3:使用v-if进行显隐控制

v-if进行true-false的切换,会销毁该元素及其所有绑定的事件、数据、组件实例等,触发重新渲染。

缺点:如果频繁切换显隐,可能会带来性能开销。

<template><el-tabs v-model="activeTab"><el-tab-pane :label="'Tab 1'" v-if="showTab1"><div>Tab 1 内容</div></el-tab-pane><el-tab-pane :label="'Tab 2'" v-if="showTab2"><div>Tab 2 内容</div></el-tab-pane><el-tab-pane :label="'Tab 3'" v-if="showTab3"><div>Tab 3 内容</div></el-tab-pane></el-tabs><el-button @click="toggleTabs">切换Tab显示</el-button>
</template><script>
export default {data() {return {activeTab: 'Tab 1',showTab1: true,showTab2: false,showTab3: false};},methods: {toggleTabs() {// 控制 Tab 的显示与隐藏this.showTab1 = !this.showTab1;this.showTab2 = !this.showTab2;this.showTab3 = !this.showTab3;}}
};
</script>

http://www.xdnf.cn/news/12282.html

相关文章:

  • 驱动:字符驱动操控硬件
  • freeRTOS中断中为什么不能进行任务切换2
  • 基于红黑树的插入功能,对Set和Map部分功能进行封装实现
  • 打造智慧医疗枢纽,香港维尔利引领东南亚健康科技升级
  • 八:操作系统设备管理之RAID
  • STM32 智能小车项目 两路红外循迹模块原理与实战应用详解
  • HTV 3.3 | 秒播无卡顿 直播源每天维护更新
  • Q: 数据库增删改查的逻辑如何实现?
  • 996引擎-自定义装备/道具:限时装备、限时道具
  • 如何通过requests和time模块限制爬虫请求速率?
  • 算法题(162):火烧赤壁
  • React状态管理Context API + useReducer
  • Flyway
  • vue3+js示例
  • delphi7 链表 使用方法
  • 基于STM32单片机的电子秤系统设计(原理图+PCB+程序+仿真+文章)
  • SpringCloud——OpenFeign
  • web第十次课后作业--Mybatis的增删改查
  • 微服务架构——配置管理与配置中心
  • 【Java】RxJava解析
  • 麒麟信安系统下修改系统默认记录日志大小
  • 上传、下载功能 巧实现
  • 如何修改项目在浏览器中的小图标
  • 【MATLAB去噪算法】基于CEEMDAN联合小波阈值去噪算法(第四期)
  • 轨道交通可视化,赋能智慧车站运维
  • C++034(一维数组)
  • 基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
  • LoRA:大模型高效微调的低秩之道——原理解析与技术实现
  • 检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线
  • 力扣面试150题--被围绕的区域