Vue3 Element Plus el-tabs数据刷新实现方式

 更新时间:2025年07月30日 09:13:04   作者:滿  
这篇文章主要介绍了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>

注意事项

  • 使用 v-if 会完全销毁和重建组件,适合数据完全独立的情况
  • keep-alive + activated 适合需要保留组件状态但刷新数据的情况
  • 对于简单场景,直接使用 @tab-change 事件即可

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue-socket.io跨域问题有效解决方法

    vue-socket.io跨域问题有效解决方法

    在本篇文章里小编给大家整理的是关于vue-socket.io跨域问题有效解决方法,对此有兴趣的朋友们可以参考下。
    2020-02-02
  • 使用vue.js开发时一些注意事项

    使用vue.js开发时一些注意事项

    使用vue.js进行项目的开发已经有了一定的时间,在任务的过程中以及和不同的开发使用者交流中,逐渐对vue.js的使用心得有了一定的积累。本文主要给大家分享一些开发时需要注意的事项
    2016-04-04
  • Vuex中五个属性以及使用方法详解

    Vuex中五个属性以及使用方法详解

    这篇文章主要给大家介绍了关于Vuex中五个属性以及使用的相关资料,Vuex是一个专为Vue.js应用程序开发的状态管理模式,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • vue中手机号,邮箱正则验证以及60s发送验证码的实例

    vue中手机号,邮箱正则验证以及60s发送验证码的实例

    下面小编就为大家分享一篇vue中手机号,邮箱正则验证以及60s发送验证码的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue中引用文件路径问题小结

    vue中引用文件路径问题小结

    vue路径分为绝对路径、相对路径、~+路径 及 别名+路径,在js中,引入带别名的文件路径,不需要在别名前加~ ,在css或者style中引入的需要在路径前面加~,路径以 ~ 开头,其后的部分将会被看作模块依赖,本文给大家介绍vue中引用文件路径问题,感兴趣的朋友一起看看吧
    2023-12-12
  • vue实现移动端input上传视频、音频

    vue实现移动端input上传视频、音频

    这篇文章主要为大家详细介绍了vue实现移动端input上传视频、音频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • vue中对虚拟dom的理解知识点总结

    vue中对虚拟dom的理解知识点总结

    在本篇文章里小编给大家整理了一篇关于vue中对虚拟dom的理解知识点总结内容,有兴趣的朋友们可以学习参考下。
    2021-06-06
  • vue项目中封装echarts的优雅方式分享

    vue项目中封装echarts的优雅方式分享

    在实际项目开发中,我们会经常与图表打交道,比如 订单数量表、商品销量表、会员数量表等等,它可能是以折线图、柱状图、饼状图等等的方式来展现,下面这篇文章主要给大家介绍了关于vue项目中封装echarts的优雅方式的相关资料,需要的朋友可以参考下
    2022-03-03
  • 一文教你如何在Vue项目中使用Emoji表情

    一文教你如何在Vue项目中使用Emoji表情

    这篇文章主要为大家详细介绍了在vue项目中如何使用emoji表情,包括font-awesome图标,v-emoji-picker,vue-emoji等emoji表情库,需要的可以参考下
    2025-03-03
  • Vue3.2 setup语法糖及Hook函数基本使用

    Vue3.2 setup语法糖及Hook函数基本使用

    这篇文章主要为大家介绍了Vue3.2 setup语法糖及Hook函数基本使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论