当前位置:首页 > VUE

vue实现标签页效果

2026-01-22 02:01:38VUE

实现标签页效果的基本思路

Vue中实现标签页效果通常需要结合动态组件或条件渲染,通过切换不同标签展示对应内容。核心逻辑包括管理当前激活的标签、绑定点击事件以及内容切换。

基于v-show的条件渲染方案

创建标签页组件,利用v-show控制内容显示:

<template>
  <div class="tabs">
    <div class="tab-header">
      <div 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="activateTab(index)"
        :class="{ 'active': activeTab === index }"
      >
        {{ tab.title }}
      </div>
    </div>
    <div class="tab-content">
      <div v-for="(tab, index) in tabs" :key="index" v-show="activeTab === index">
        {{ tab.content }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeTab: 0,
      tabs: [
        { title: '标签1', content: '内容1' },
        { title: '标签2', content: '内容2' },
        { title: '标签3', content: '内容3' }
      ]
    }
  },
  methods: {
    activateTab(index) {
      this.activeTab = index;
    }
  }
}
</script>

<style>
.tab-header div {
  display: inline-block;
  padding: 10px 20px;
  cursor: pointer;
}
.tab-header div.active {
  border-bottom: 2px solid #42b983;
}
.tab-content {
  padding: 20px;
  border: 1px solid #eee;
}
</style>

使用动态组件实现

通过Vue的<component>元素结合is属性实现动态切换:

<template>
  <div class="tabs">
    <div class="tab-header">
      <div 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="activateTab(index)"
        :class="{ 'active': activeTab === index }"
      >
        {{ tab.title }}
      </div>
    </div>
    <component :is="currentTabComponent"></component>
  </div>
</template>

<script>
import Tab1 from './Tab1.vue';
import Tab2 from './Tab2.vue';
import Tab3 from './Tab3.vue';

export default {
  components: { Tab1, Tab2, Tab3 },
  data() {
    return {
      activeTab: 0,
      tabs: [
        { title: '标签1', component: 'Tab1' },
        { title: '标签2', component: 'Tab2' },
        { title: '标签3', component: 'Tab3' }
      ]
    }
  },
  computed: {
    currentTabComponent() {
      return this.tabs[this.activeTab].component;
    }
  },
  methods: {
    activateTab(index) {
      this.activeTab = index;
    }
  }
}
</script>

使用Vue Router实现路由标签页

结合Vue Router实现基于路由的标签页:

// router.js
const routes = [
  { path: '/tab1', component: Tab1 },
  { path: '/tab2', component: Tab2 },
  { path: '/tab3', component: Tab3 }
]
<template>
  <div>
    <router-link 
      v-for="(tab, index) in tabs" 
      :key="index" 
      :to="tab.path"
      active-class="active"
    >
      {{ tab.title }}
    </router-link>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { title: '标签1', path: '/tab1' },
        { title: '标签2', path: '/tab2' },
        { title: '标签3', path: '/tab3' }
      ]
    }
  }
}
</script>

第三方组件库实现

使用Element UI等UI库快速实现:

<template>
  <el-tabs v-model="activeTab">
    <el-tab-pane label="标签1" name="tab1">内容1</el-tab-pane>
    <el-tab-pane label="标签2" name="tab2">内容2</el-tab-pane>
    <el-tab-pane label="标签3" name="tab3">内容3</el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      activeTab: 'tab1'
    }
  }
}
</script>

可关闭标签页实现

添加关闭功能需要维护标签数组:

vue实现标签页效果

<template>
  <div class="tabs">
    <div class="tab-header">
      <div 
        v-for="(tab, index) in tabs" 
        :key="index"
        @click="activateTab(index)"
        :class="{ 'active': activeTab === index }"
      >
        {{ tab.title }}
        <span @click.stop="closeTab(index)">×</span>
      </div>
    </div>
    <div class="tab-content">
      <div v-show="activeTab === index" v-for="(tab, index) in tabs" :key="index">
        {{ tab.content }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeTab: 0,
      tabs: [
        { title: '标签1', content: '内容1' },
        { title: '标签2', content: '内容2' },
        { title: '标签3', content: '内容3' }
      ]
    }
  },
  methods: {
    activateTab(index) {
      this.activeTab = index;
    },
    closeTab(index) {
      this.tabs.splice(index, 1);
      if (index <= this.activeTab) {
        this.activeTab = Math.max(0, this.activeTab - 1);
      }
    }
  }
}
</script>

标签: 效果标签
分享给朋友:

相关文章

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 动态数据绑定展示 通过 Vue 的响应式特性,实时展示数据变化。例如,表单输入与预览同步: <template> <div> <…

jquery效果

jquery效果

jQuery 动画效果 jQuery 提供了多种内置动画效果,可用于实现平滑的页面交互。常用的方法包括 show()、hide()、toggle()、fadeIn()、fadeOut()、slideU…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view cl…

elementui标签

elementui标签

ElementUI 标签的基本使用 ElementUI 提供 <el-tag> 组件用于展示标签信息,支持多种样式和交互功能。 基础用法 通过 type 属性设置标签类型,可选值包括…

vue实现基金效果

vue实现基金效果

Vue 实现基金效果 在 Vue 中实现基金效果,通常指的是模拟基金的增长、波动或可视化展示。以下是几种常见的实现方式: 数据绑定与动态更新 通过 Vue 的数据绑定特性,可以动态展示基金净值的变化…

vue实现折叠效果

vue实现折叠效果

使用 v-show 或 v-if 实现基础折叠 通过 Vue 的指令 v-show 或 v-if 控制元素的显示与隐藏。v-show 通过 CSS 的 display 属性切换,v-if 直接操作 D…