vue.js移动端tab组件的封装实践实例
发布时间 - 2026-01-11 02:07:33 点击率:次这是vue.js系列文章第二遍,第一篇讲述的是如何搭建vue.js的开发环境,计划按进度做成一款完整的app,当然前提是时间允许的话。本文用到了stylus语法,至于为什么使用stylus而不去用sass,主要是因为stylus来自于Node.js社区。总之stylus是一款高效的CSS预处理器,具体使用不在本文讨论范围。好了,废话不说了,下面讲述怎么封装tababr的切换。

底部tab进行页面切换,会用到vue里面的路由,也就是vue-router
我们在安装vue-cli时选中默认安装vue-router即可。
安装完毕后,打开我的项目,我们需要在router目录的index.vue中配置路由信息,具体配置信息如下
从上面图片,我们可以看到,我们一共配置了4子页面,其中redirect为配置默认组件的路由。
路由配置完成后,我们需要封装tab组件了
因为tab组件属于基础组件,所以我们新建了文件夹tab,然后在tab文件夹下面新建了tabbar组件和tababritem组件。我们先说tababritem组件的封装
tabbaritem封装
我们知道tababritem有一张正常显示图片,选中后的图片,和图片下的文字,其中属性id用来记录当前tabbaritem的组件名,属性isRouter用来记录当前选中是否是这个tababritem。
<template>
<a class="m-tabbar-item" :class="{'is-active':isActive}" @click="goToRouter">
<div class="m-tabbar-item-icon" v-show="!isActive"><slot name="icon-normal"></slot></div>
<div class="m-tabbar-item-icon" v-show="isActive"><slot name="icon-active"></slot></div>
<div class="m-tabbar-item-text"><slot></slot></div>
</a>
</template>
<script type="text/ecmascript-6">
export default{
props: {
id: {
type: String
},
isRouter: {
type: Boolean,
default: false
}
},
computed: {
isActive () {
return this.isRouter
}
},
methods: {
goToRouter () {
this.$parent.$emit('tabbarActionEvent', this.id)
// 判断是否为路由跳转
this.$router.push(this.id)
}
}
}
</script>
<style scoped lang="stylus" rel="stylesheet/stylus">
.m-tabbar-item
flex: 1
text-align: center
.m-tabbar-item-icon
padding-top: 5px
padding-bottom 1px
img
width: 24px
height: 24px
.m-tabbar-item-text
font-size: 8px
color:#949494
&.is-active
.m-tabbar-item-text
color: #fa3e25
</style>
接下来,我们要封装tababr,tabbar里面需要包含tabbaritem,主要设置了下tabbar的样式,具体代码如下
tabbar的封装
<template>
<div class="m-tabbar">
<slot></slot>
</div>
</template>
<script type="text/ecmascript-6">
export default {}
</script>
<style scoped lang="stylus" rel="stylesheet/stylus">
.m-tabbar
display: flex
flex-direction: row
position: fixed
bottom: 0
left: 0
right: 0
width: 100%
overflow: hidden
height: 50px
background: #fff
border-top: 1px solid #e4e4e4
</style>
最后在我们的app.vue里面引用tabbar组件,监听子类tabbaritem的点击方法,来控制当前哪个item的选中颜色文字的改变
app.vue代码
<template>
<div id="app">
<router-view></router-view>
<m-tabbar @tabbarActionEvent='changeSelectedValue'>
<m-tabbar-item id='Home' :isRouter="isHome">


首页
</m-tabbar-item>
<m-tabbar-item id='Position' :isRouter="isPosition">


职位
</m-tabbar-item>
<m-tabbar-item id='Message' :isRouter="isMessage">


消息
</m-tabbar-item>
<m-tabbar-item id='Me' :isRouter="isMe">


我
</m-tabbar-item>
</m-tabbar>
</div>
</template>
<script>
import mTabbar from 'common/tab/tab.vue'
import mTabbarItem from 'common/tab/tabbar-item'
export default {
name: 'app',
components: {
mTabbar,
mTabbarItem
},
data () {
return {
isHome: true,
isPosition: false,
isMessage: false,
isMe: false
}
},
methods: {
changeSelectedValue: function (elValue) {
if (elValue === 'Home') {
this.isHome = true
} else {
this.isHome = false
}
if (elValue === 'Position') {
this.isPosition = true
} else {
this.isPosition = false
}
if (elValue === 'Message') {
this.isMessage = true
} else {
this.isMessage = false
}
if (elValue === 'Me') {
this.isMe = true
} else {
this.isMe = false
}
}
}
}
</script>
自此tababr已经封装完毕了,其中用到的tabbaritem图片,大家可以自己替换掉,下一篇,会提到导航部分的封装
最终运行效果如下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue.js
# tab组件
# tab切换
# tab动态组件
# vue封装TabBar组件的完整步骤记录
# vue实现tab路由切换组件的方法实例
# vue组件tabbar使用方法详解
# Vue封装一个Tabbar组件 带组件路由跳转方式
# 的是
# 这是
# 是因为
# 好了
# 子类
# 不去
# 可以看到
# 来自于
# 跳转
# 下一篇
# 首页
# 先说
# 第一篇
# 大家多多
# 正常显示
# 判断是否
# 是一款
# 完成后
# 在我们的
# 完毕后
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
java ZXing生成二维码及条码实例分享
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
香港网站服务器数量如何影响SEO优化效果?
Firefox Developer Edition开发者版本入口
昵图网官方站入口 昵图网素材图库官网入口
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Python文件操作最佳实践_稳定性说明【指导】
想要更高端的建设网站,这些原则一定要坚持!
公司门户网站制作流程,华为官网怎么做?
网站建设整体流程解析,建站其实很容易!
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何在阿里云服务器自主搭建网站?
如何快速生成可下载的建站源码工具?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
如何在橙子建站上传落地页?操作指南详解
如何快速搭建高效香港服务器网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
如何快速搭建安全的FTP站点?
如何在阿里云部署织梦网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何在不使用负向后查找的情况下匹配特定条件前的换行符
iOS发送验证码倒计时应用
网站建设保证美观性,需要考虑的几点问题!
高性能网站服务器配置指南:安全稳定与高效建站核心方案
JS中对数组元素进行增删改移的方法总结
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
中山网站推广排名,中山信息港登录入口?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
高端网站建设与定制开发一站式解决方案 中企动力
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
焦点电影公司作品,电影焦点结局是什么?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
独立制作一个网站多少钱,建立网站需要花多少钱?
b2c电商网站制作流程,b2c水平综合的电商平台?
javascript中对象的定义、使用以及对象和原型链操作小结
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
MySQL查询结果复制到新表的方法(更新、插入)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
济南网站建设制作公司,室内设计网站一般都有哪些功能?

