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

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.lryc.cn/news/2403894.html

相关文章:

  • git小乌龟不显示图标状态解决方案
  • 获取 OpenAI API Key
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • pycharm中提示C++ compiler not found -- please install a compiler
  • 类型别名与类型自动推导
  • 一站式直播工具:助力内容创作者高效开启直播新时代
  • 【学习笔记】Lamba表达式[匿名函数]
  • 学习笔记(26):线性代数-张量的降维求和,简单示例
  • 以智能管理为基础,楼宇自控打造建筑碳中和新路径
  • 81 实战一:给root目录扩容
  • 1130 - Host ‘xxx.x.xx.xxx‘is not allowed to connect to this MySQL server
  • HttpURLConnection实现
  • day029-Shell自动化编程-计算与while循环
  • Linux命令基础(2)
  • vue3 + vite实现动态路由,并进行vuex持久化设计
  • ThingsCloud事物云平台搭建-微信小程序
  • 为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
  • 学习路之php--性能优化
  • GC1808:高性能24位立体声音频ADC芯片解析
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 产品经理课程(九)
  • 二.单例模式‌
  • 从零开始开发纯血鸿蒙应用之网络检测
  • 向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
  • 接IT方案编写(PPT/WORD)、业务架构设计、投标任务
  • PostgreSQL 的扩展pageinspect
  • Unity——QFramework框架 内置工具
  • 【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
  • 股指期货波动一个点多少钱?
  • Kafka 快速上手:安装部署与 HelloWorld 实践(一)