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

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 事件即可

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

相关文章:

  • 更快的图像局部修改与可控生成:Flex.2-preview
  • 航顺 芯片 开发记录 (一) 2025年4月27日19:23:32
  • 【博客系统】博客系统第二弹:实现博客列表接口
  • T检验、F检验及样本容量计算学习总结
  • 通过示例学习:连续 XOR
  • SpringBoot驾校报名小程序实现
  • 详细PostMan的安装和基本使用方法
  • 【SF】在 Android 显示系统中,图层合成方式 Device 和 Client 的区别
  • 文章记单词 | 第50篇(六级)
  • Zookeeper HA集群搭建
  • 昂瑞微蓝牙OM6621系列对比选型指南
  • 《代码整洁之道》第8章 边界 - 笔记
  • NCCL 通信与调试
  • Grok发布了Grok Studio 和 Workspaces两个强大的功能。该如何使用?如何使用Grok3 API?
  • 深度学习与SLAM特征提取融合:技术突破与应用前景
  • 深入解读:2025 数字化转型管理 参考架构
  • 视频HLS分片与关键帧优化深度解析
  • 2025 网络安全技术深水区探索:从 “攻防对抗” 到 “数字韧性” 的范式跃迁
  • VRRP与BFD在冗余设计中的核心区别:从“备用网关”到“毫秒级故障检测”
  • JavaScript中主动抛出错误的方法
  • 【java】lambda表达式总结
  • 类-python
  • AI中Token的理解与使用总结
  • seededit: Align image re-generation to image editing
  • 【中级软件设计师】编译和解释程序的翻译阶段、符号表 (附软考真题)
  • RC吸收电路参数设置实战
  • DJL FastText (FtModel) 使用指南
  • 如何编写企业的数据标准管理办法
  • 人大金仓sys_rman备份脚本
  • 【SAP-CO】标准价(S价)和移动平均价(V价)