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

Vue3 Element Plus el-tabs数据刷新方法

方法1: 使用 @tab-change 事件

<template><el-tabs v-model="activeTab" @tab-change="handleTabChange"><el-tab-pane label="Tab 1" name="tab1"><div v-if="activeTab === 'tab1'"><!-- 内容1 -->{{ tab1Data }}</div></el-tab-pane><el-tab-pane label="Tab 2" name="tab2"><div v-if="activeTab === 'tab2'"><!-- 内容2 -->{{ tab2Data }}</div></el-tab-pane></el-tabs>
</template><script setup>
import { ref } from 'vue';const activeTab = ref('tab1');
const tab1Data = ref(null);
const tab2Data = ref(null);const handleTabChange = (tabName) => {if (tabName === 'tab1') {fetchTab1Data();} else if (tabName === 'tab2') {fetchTab2Data();}
};const fetchTab1Data = async () => {// 模拟API请求tab1Data.value = await new Promise(resolve => {setTimeout(() => resolve('Tab 1 数据已刷新'), 500);});
};const fetchTab2Data = async () => {// 模拟API请求tab2Data.value = await new Promise(resolve => {setTimeout(() => resolve('Tab 2 数据已刷新'), 500);});
};// 初始化加载第一个tab的数据
fetchTab1Data();
</script>

方法2: 使用 v-if 控制内容渲染

<template><el-tabs v-model="activeTab"><el-tab-pane label="Tab 1" name="tab1"><Tab1Content v-if="activeTab === 'tab1'" /></el-tab-pane><el-tab-pane label="Tab 2" name="tab2"><Tab2Content v-if="activeTab === 'tab2'" /></el-tab-pane></el-tabs>
</template><script setup>
import { ref } from 'vue';
import Tab1Content from './Tab1Content.vue';
import Tab2Content from './Tab2Content.vue';const activeTab = ref('tab1');
</script>

在子组件中使用 onMounted 钩子加载数据:

<!-- Tab1Content.vue -->
<script setup>
import { onMounted, ref } from 'vue';const data = ref(null);onMounted(async () => {// 加载数据data.value = await fetchData();
});
</script>

方法3: 使用 keep-alive 和 activated 钩子

如果需要缓存组件但依然在切换时刷新数据:

<template><el-tabs v-model="activeTab"><el-tab-pane label="Tab 1" name="tab1"><keep-alive><Tab1Content v-if="activeTab === 'tab1'" /></keep-alive></el-tab-pane><el-tab-pane label="Tab 2" name="tab2"><keep-alive><Tab2Content v-if="activeTab === 'tab2'" /></keep-alive></el-tab-pane></el-tabs>
</template>

在子组件中使用 activated 钩子:

<!-- Tab1Content.vue -->
<script setup>
import { ref, activated } from 'vue';const data = ref(null);const loadData = async () => {data.value = await fetchData();
};// 组件激活时加载数据
activated(() => {loadData();
});// 初始加载
loadData();
</script>

注意事项

  1. 使用 v-if 会完全销毁和重建组件,适合数据完全独立的情况

  2. keep-alive + activated 适合需要保留组件状态但刷新数据的情况

  3. 对于简单场景,直接使用 @tab-change 事件即可

相关文章:

  • 头歌实训之游标触发器
  • Android LiveData关键代码
  • 对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
  • 游戏哪些接口会暴露源IP?_深度解析服务器通信安全隐患
  • 关于 Web 服务器的五个案例
  • 迷你世界UGC3.0脚本Wiki组件说明
  • 进程控制的学习
  • Ubuntu 磁盘空间占用清理(宝塔)
  • 蓝桥杯 16. 密文搜索
  • C# 利用log4net 工作台打印和保存到文件
  • Redis使用总结
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 数字特征
  • MIT6.S081 - Lab10 mmap(文件内存映射)
  • 学习笔记—双指针算法—移动零
  • (done) 吴恩达版提示词工程 8. 聊天机器人 (聊天格式设计,上下文内容,点餐机器人)
  • Spark-Streaming2
  • 【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
  • Git常用命令简明教程
  • Git 撤回合并提交
  • 在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)
  • 持续更新丨伊朗港口爆炸事件已致406人受伤
  • 外交部:美国是国际军控与防扩散体系的最大破坏者
  • 沈阳市委常委马原出任阜新市委副书记、市政府党组书记
  • 从息屏24小时到息屏1小时,姚明在深圳开启落地试点
  • 技术派|“会飞的手榴弹”:微型无人机将深刻改变单兵作战方式
  • “两高”发布侵犯知产犯罪司法解释:降低部分犯罪入罪门槛