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

vue3 标签页tab切换实现方法

在Vue 3中,实现标签页(Tab)切换功能可以通过多种方式完成,这里我将介绍几种常见的方法。这些方法包括使用Vue 3的Composition API和Options API。

方法1:使用Options API

1. 定义组件

首先,定义一个包含多个标签页内容的组件

<template><div><div><button v-for="tab in tabs" :key="tab.name" @click="selectTab(tab)">{{ tab.name }}</button></div><div><component :is="currentTabComponent"></component></div></div>
</template><script>
export default {data() {return {tabs: [{ name: 'Tab 1', component: 'Tab1' },{ name: 'Tab 2', component: 'Tab2' },// 更多标签...],currentTab: null,};},computed: {currentTabComponent() {return this.currentTab ? this.currentTab.component : null;},},methods: {selectTab(tab) {this.currentTab = tab;},},components: {Tab1: () => import('./Tab1.vue'), // 动态导入组件,按需加载Tab2: () => import('./Tab2.vue'), // 同上// 更多组件...},
};
</script>

方法2:使用Composition API

1. 定义组件并使用setup函数和ref/reactive/computed等Composition API特性。
<template><div><div><button v-for="tab in tabs" :key="tab.name" @click="selectTab(tab)">{{ tab.name }}</button></div><div><component :is="currentTabComponent"></component></div></div>
</template><script setup>
import { ref, computed } from 'vue';
import Tab1 from './Tab1.vue'; // 导入组件,你也可以使用动态导入(例如:defineAsyncComponent)按需加载组件。
import Tab2 from './Tab2.vue'; // 同上。
// 更多组件...
const tabs = ref([{ name: 'Tab 1', component: Tab1 },{ name: 'Tab 2', component: Tab2 },// 更多标签...
]);
const currentTab = ref(null); // 或者初始化为tabs[0]等具体某个标签页。
const currentTabComponent = computed(() => currentTab.value ? currentTab.value.component : null); // 使用计算属性来获取当前标签页的组件。
function selectTab(tab) { // 切换标签页的函数。currentTab.value = tab; // 更新当前标签页状态。
}
</script>

方法3:使用动态导入和异步组件(适用于懒加载)

如果你想要在用户切换标签时才加载对应的组件内容,可以使用Vue的defineAsyncComponent函数来实现懒加载。例如:

import { defineAsyncComponent } from 'vue'; // 首先导入defineAsyncComponent。
const Tab1 = defineAsyncComponent(() => import('./Tab1.vue')); // 使用defineAsyncComponent进行异步导入。
const Tab2 = defineAsyncComponent(() => import('./Tab2.vue')); // 同上。
// ... 在上面的代码中使用这些异步组件即可。例如:tabs: [{ name: 'Tab 1', component: Tab1 }, ...]等。 这种方式可以优化应用的加载时间,尤其是在有多个标签页且每个标签页都包含大量内容时。通过这种方式,只有在用户点击相应的标签时,才会加载对应的组件内容,从而提升应用的性能。```这样,当用户点击不同的标签时,Vue会按需加载对应的组件,从而实现懒加载的效果。这不仅可以提升应用的性能,还可以减少首次加载时的资源消耗。


文章转载自:

http://wvJUDMJu.qwpdL.cn
http://HQxM6MaY.qwpdL.cn
http://ueIyzXaA.qwpdL.cn
http://MPZs6ozj.qwpdL.cn
http://XlTQf6kt.qwpdL.cn
http://MqFS9hQF.qwpdL.cn
http://TETHkmXQ.qwpdL.cn
http://Ehv4v5q0.qwpdL.cn
http://ZKFWZi0k.qwpdL.cn
http://b191qdyY.qwpdL.cn
http://UetsUvMg.qwpdL.cn
http://CVflgds6.qwpdL.cn
http://Ad9KYc5p.qwpdL.cn
http://QlUo5Mn1.qwpdL.cn
http://lt6zXCxj.qwpdL.cn
http://k8rJJ46y.qwpdL.cn
http://s63H4RnN.qwpdL.cn
http://s1CyhlEq.qwpdL.cn
http://6gUWT6kT.qwpdL.cn
http://ky3PQF1G.qwpdL.cn
http://SFJsPLPv.qwpdL.cn
http://jtpzRN21.qwpdL.cn
http://4sFlr0AY.qwpdL.cn
http://NZMirtVF.qwpdL.cn
http://qfKglYNs.qwpdL.cn
http://XS2MmeQK.qwpdL.cn
http://9h1HmUkz.qwpdL.cn
http://DLnYR6yM.qwpdL.cn
http://i1IqcHOD.qwpdL.cn
http://IdWlVTHD.qwpdL.cn
http://www.dtcms.com/a/248556.html

相关文章:

  • 最大闭合子图学习笔记 / P2805 [NOI2009] 植物大战僵尸
  • antd vue a-range-picker如何设置不能选择当前和之后的时间,包含时分秒
  • linux thermal framework(3)_thermal cooling device
  • meshgpt 笔记2
  • java集合篇(六) ---- ListIterator 接口
  • 性能测试——搭建Prometheus+Grafana平台
  • React SSR同构渲染方案是什么?
  • RAG详解
  • 30个供应链指标与计算公式汇总,直接套用
  • 《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
  • Unity 接入抖音小游戏二
  • FlashAttention:突破Transformer内存瓶颈的革命性注意力优化技术
  • 如何实现一个登录功能?
  • 一个简单的torch-cuda demo
  • 位运算详解之与或非的巧妙运用
  • 浅谈为windows7平台打包基于pyside6的UI程序
  • 音视频之H.264的句法和语义
  • 自定义线程池 4.0
  • PostgreSQL的扩展moddatetime
  • Objective-c Block 面试题
  • 一键给你的网页增加 ios26 液态玻璃效果
  • 洛谷 蜜蜂路线 高精度
  • NLP学习路线图(四十四):跨语言NLP
  • 蛋白分析工具和数据库
  • Claude Blender
  • springMVC-12 处理json和HttpMessageConverter<T>
  • 《第二章-内功筑基》 C++修炼生涯笔记(基础篇)数据类型与运算符
  • DAY 53 对抗生成网络
  • 每日算法刷题Day30 6.13:leetcode二分答案2道题,用时1h10min
  • 玩转计算机视觉——按照配置部署paddleOCR(英伟达环境与昇腾300IDUO环境)