当前位置:首页 > VUE

vue实现tab标签

2026-02-09 10:50:20VUE

Vue 实现 Tab 标签的方法

动态组件结合 v-for

通过 v-for 渲染标签页标题,动态切换组件内容。
代码示例

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index" 
        @click="currentTab = tab.component"
        :class="{ active: currentTab === tab.component }"
      >
        {{ tab.name }}
      </button>
    </div>
    <component :is="currentTab" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 'Tab1Content',
      tabs: [
        { name: 'Tab 1', component: 'Tab1Content' },
        { name: 'Tab 2', component: 'Tab2Content' }
      ]
    };
  },
  components: {
    Tab1Content: { template: '<div>Content 1</div>' },
    Tab2Content: { template: '<div>Content 2</div>' }
  }
};
</script>

<style>
.active {
  background-color: #ddd;
}
</style>

使用 v-show 控制显示

通过 v-show 切换不同标签页内容的显隐。
代码示例

<template>
  <div>
    <div class="tabs">
      <button 
        v-for="(tab, index) in tabs" 
        :key="index" 
        @click="currentTab = index"
        :class="{ active: currentTab === index }"
      >
        {{ tab.name }}
      </button>
    </div>
    <div v-show="currentTab === 0">Content 1</div>
    <div v-show="currentTab === 1">Content 2</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0,
      tabs: [
        { name: 'Tab 1' },
        { name: 'Tab 2' }
      ]
    };
  }
};
</script>

使用第三方库(如 vue-router

通过路由实现多页签导航,适合复杂场景。
代码示例

vue实现tab标签

<template>
  <div>
    <router-link 
      v-for="(tab, index) in tabs" 
      :key="index" 
      :to="tab.path"
      active-class="active"
    >
      {{ tab.name }}
    </router-link>
    <router-view />
  </div>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { name: 'Tab 1', path: '/tab1' },
        { name: 'Tab 2', path: '/tab2' }
      ]
    };
  }
};
</script>

样式优化建议

  • 为标签页按钮添加悬停效果和过渡动画。
  • 使用 CSS Flexbox 或 Grid 布局对齐标签页标题。
  • 通过 :class 绑定高亮当前选中标签页。

注意事项

  • 动态组件方式适合内容差异大的场景,但需提前注册组件。
  • v-show 适合简单内容切换,初始会渲染所有内容。
  • 路由方式需搭配 vue-router,适合多视图应用。

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

相关文章

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue实现评分

vue实现评分

Vue 实现评分功能 使用组件库实现 安装 element-ui 或 ant-design-vue 这类 UI 库,它们已经内置了评分组件。 以 element-ui 为例: <templa…