当前位置:首页 > VUE

vue实现tab互斥

2026-01-18 05:08:12VUE

Vue 实现 Tab 互斥的方法

使用 v-model 和计算属性

通过 v-model 绑定当前激活的 Tab,利用计算属性确保只有一个 Tab 处于激活状态。

<template>
  <div>
    <button 
      v-for="tab in tabs" 
      :key="tab.id"
      @click="activeTab = tab.id"
      :class="{ active: activeTab === tab.id }"
    >
      {{ tab.name }}
    </button>
    <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id">
      {{ tab.content }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { id: 1, name: 'Tab 1', content: 'Content 1' },
        { id: 2, name: 'Tab 2', content: 'Content 2' },
        { id: 3, name: 'Tab 3', content: 'Content 3' }
      ],
      activeTab: 1
    };
  }
};
</script>

使用组件封装

将 Tab 逻辑封装为可复用的组件,通过 props 和事件实现互斥。

<template>
  <div>
    <tab-group :tabs="tabs" v-model="activeTab" />
  </div>
</template>

<script>
import TabGroup from './TabGroup.vue';

export default {
  components: { TabGroup },
  data() {
    return {
      tabs: [
        { id: 1, name: 'Tab 1', content: 'Content 1' },
        { id: 2, name: 'Tab 2', content: 'Content 2' },
        { id: 3, name: 'Tab 3', content: 'Content 3' }
      ],
      activeTab: 1
    };
  }
};
</script>

使用 Vuex 管理状态

在大型应用中,可以通过 Vuex 集中管理 Tab 状态,确保全局互斥。

// store.js
export default new Vuex.Store({
  state: {
    activeTab: 1
  },
  mutations: {
    setActiveTab(state, tabId) {
      state.activeTab = tabId;
    }
  }
});

// Component
<template>
  <button @click="$store.commit('setActiveTab', tab.id)">
    {{ tab.name }}
  </button>
</template>

动态渲染内容

通过动态组件或条件渲染实现 Tab 内容的切换,保持互斥性。

<template>
  <component :is="currentTabComponent" />
</template>

<script>
export default {
  computed: {
    currentTabComponent() {
      return `tab-${this.activeTab}`;
    }
  }
};
</script>

注意事项

  • 确保每个 Tab 的唯一标识(如 id)不重复。
  • 样式可以通过 :class 动态绑定,高亮当前激活的 Tab。
  • 如果需要动画效果,可以使用 <transition> 包裹内容区域。

vue实现tab互斥

标签: 互斥vue
分享给朋友:

相关文章

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-containe…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

vue聊天实现

vue聊天实现

Vue 聊天应用实现步骤 创建 Vue 项目 使用 Vue CLI 或 Vite 初始化项目,安装必要依赖(如 Vue 3、Element UI 或 Vuetify 用于 UI 组件)。 npm…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。it…