Vue.js 实现自定义 Tabs 选项卡组件教程
作者:松果时间:2026-10-31 04:07:02浏览:385
本文详细介绍如何使用 Vue.js 封装一个自定义的 Tabs 选项卡组件。通过示例代码展示组件的调用方式及内部实现逻辑,包括导航数据的处理、点击切换事件的处理以及样式控制。适合希望学习 Vue 组件开发的前端开发者参考。
Vue.js Tabs 组件介绍
本文介绍一个基于 Vue.js 开发的自定义 Tabs 选项卡组件。由于作者接触 Vue 时间尚短,代码中可能存在不足之处,欢迎读者提出建议以便改进。以下是该组件的具体实现方法。
组件调用方式
组件调用示例如下:
<template>
<div class="tabs-contents">
<!-- 调用tabs组件 -->
<tabs :flag.sync='tabsShowFlag' :navtitle='navTitle' :navdata='navData'>
<div class="tabs-body">
<div v-if='navData[0].showFlag>0'>
<div class="one-content">
<p>二十国集团领导人第十一次峰会将于9月4日至5日在浙江杭州举行。峰会主题为“构建创新、活力、联动、包容的世界经济”。二 十国集团成员和嘉宾国领导人及有关国际组织负责人将应邀与会。中国国家主席将出席并主持会议,并出席金砖国家领导人非正式会晤等有关活动。二十国集团工商峰会将于9月3日至4日在浙江杭州举行。中国国家主席将出席开幕式并发表主旨演讲。部分二十国集团成员和嘉宾国领导人及有关国际组织负责人将应邀与会。 </p>
</div>
</div>
<div v-if='navData[1].showFlag>0'>
<div class="two-content">
<p>党员领导干部</p>
<div>
盘点历届奥运会中国乒乓球队精彩比赛瞬间。2016里约奥运会乒乓球男团半决赛,中国3-0韩国晋级,张继科遭遇韩国小将郑荣植的顽强阻击,在两度落后的情况下,苦战五局才得以3:2涉险过关。图为张继科精彩比赛瞬间。
</div>
</div>
</div>
<div v-if='navData[2].showFlag>0'>
<label class="glyphicon glyphicon-asterisk"></label>
<span class="glyphicon glyphicon-remove"></span>
<div class="two-content">
<p>都说程序员有三宝:人傻,钱多,死得早。博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的。朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提并行,岂不快哉。咳,话题扯得有点远,今天博主给大家写一篇关于css如何设置select、radio 、 checkbox 、file样式的问题,这里不涉及模拟框,仅介绍原生情况下如何做到自定义样式,废话不多说,赖次够!</p>
<div>
北京时间8月16日早上,中国游泳队抵达北京,队员们一走出到达出口就被热情的粉丝们蜂拥围堵,尤其是宁泽涛、傅园慧等高人气运动员,更是寸步难行。供图:视觉中国
</div>
</div>
</div>
<div v-if='navData[3].showFlag>0'>
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-3 control-label"><span class='add-people-sign'>*</span>姓名:</label>
<div class="col-sm-2"><input type="text" class="form-control"></div>
</div>
</div>
</div>
</div>
</tabs>
</div>
</template>
<script>
import tabs from './yezitabs.vue' //引入组件
export default {
components: {
tabs,
},
ready: function() {
},
methods: {
},
data() {
return {
tabsShowFlag:true,
navTitle:'新闻',
navData: [{
key: 'biubiu',
showFlag: 1,
}, {
key: '豆豆打豆豆',
showFlag: -1,
}, {
key: '单身汪',
showFlag: -1
},{
key: '喵嘞个咪',
showFlag: -1
}],
}
},
}
</script>
<style scoped>
</style>
组件核心实现
Tabs 组件的具体实现代码如下:
<template>
<div class="tabs-content" v-if='flag'>
<div class="top">
<div class="title">{{navtitle}}</div>
<ul class="nav nav-tabs">
<li v-for='(navindex,nav) in navdata' class="nav-li" v-bind:class='{active:nav.showFlag>=0}' @click='keyShowFun(navindex)'>
<a href="#">{{nav.key}}</a>
</li>
</ul>
</div>
<div class="v-tabs-item">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
props: {
flag: {
type: Boolean,
required: true,
twoWay: true
},
navtitle: {
type: String,
default: ''
},
navdata: {
type: Array,
required: true,
},
},
components: {
},
ready: function() {
},
methods: {
keyShowFun:function(index){
let _this=this;
_this.navdata.forEach(function(item){
item.showFlag=-1;
});
_this.navdata[index].showFlag=1;
}
},
data() {
return {
}
},
}
</script>
<style scoped>
</style>
效果展示
组件运行效果图如下:

本文内容已收录至《Vue.js 前端组件学习教程》,欢迎查阅。
如需了解更多 Vue.js 组件相关教程,请访问专题:vue.js 组件学习教程。
若需进一步深入学习,可参考以下专题:javascript 选项卡操作方法汇总、jquery 选项卡操作方法汇总。
以上就是本文的全部内容,希望对读者的学习有所帮助,欢迎支持本站。
作者最新文章
Vue前端日历插件VCalendar集成与使用指南
2026-10-31 18:16:55
uniapp scroll-view 组件实战:Vue3 改造与滚动逻辑详解
2026-10-31 14:49:47
ElementUI el-calendar 周月视图切换与自定义实现
2026-10-31 14:48:43
Vue Element UI 结合 sortable.js 实现嵌套表格行内拖拽排序
2026-10-31 13:57:34
el-input 限制输入只允许输入浮点型的解决思路
2026-10-31 12:30:12
