TabBar.vue基本上是放在App.vue里面,都存在

<template>
<div id="app">
<home-tab-bar :tar-bar-config="tarBarConfig"></home-tab-bar>
<router-view></router-view>
</div>
</template>

我自己把TabBar.vue定义成一个全局组件。

并且用的是自定义图标。如果用到了自定义图标,就需要定义插槽了。

TabBar.vue

<!-- 主页标签切换 -->
<template>
<div class="home-tab-bar">
<van-tabbar
v-model="defaultTarBarConfig.active"
route
:active-color="defaultTarBarConfig.activeColor"
:inactive-color="defaultTarBarConfig.inactiveColor"
>
<van-tabbar-item
v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
:key="index"
replace
:name="item.label"
:to="item.routerPath"
>
<span>{{item.label}}</span>
<template #icon="props">
<img :src="props.active ? item.icon.active : item.icon.inactive" />
</template>
</van-tabbar-item>
</van-tabbar>
</div>
</template>
<script>
export default {
props: {
tarBarConfig: {
type: Object,
required: true
}
},
name: "HomeTabBar",
data() {
return {
defaultTarBarConfig: {
tabBarItemList: [
// {
// label: "about", //文字标签
// routerPath: "/about", //路由
// icon: "home-o" //图标
// },
],
active: "", //默认激活的值
activeColor: "#1989fa", //激活色
inactiveColor: "#7d7e80" // 未选中标签的颜色 000
}
};
},
methods: {
initDefaultTarBarConfig() {
this.defaultTarBarConfig = {
...this.defaultTarBarConfig,
...this.tarBarConfig
};
}
},
created() {
this.initDefaultTarBarConfig();
}
};
</script>
<style lang="less" scoped>
</style>

index.js

import HomeTabBar from './HomeTabBar'

export default {
//Vue.use()方法就会自动执行install
install(Vue) {
Vue.component(HomeTabBar.name, HomeTabBar) //组建的名字和组件
} }
外面传的props tarBarConfig

tarBarConfig: {
tabBarItemList: [
{
label: "about",
routerPath: "/about",
icon: {
active: require("assets/img/homeTabBar/aboutActive.png"),
inactive: require("assets/img/homeTabBar/aboutInactive.png")
}
},
{
label: "goods",
routerPath: "/goods",
icon: {
active: require("assets/img/homeTabBar/goodsAcitve.png"),
inactive: require("assets/img/homeTabBar/goodsInacitve.png")
}
},
{
label: "news",
routerPath: "/news",
icon: {
active: require("assets/img/homeTabBar/newsActive.png"),
inactive: require("assets/img/homeTabBar/newsInactive.png")
}
}
],
active: "news", //默认激活的值
activeColor: "#1989fa", //激活色
inactiveColor: "#7d7e80" // 未选中标签的颜色 000
}

第二种方式:直接使用vant里面的图标,就不需要定义插槽了。很简单的封装

homeTabBar.vue

<!-- 主页标签切换 -->
<template>
<div class="home-tab-bar">
<van-tabbar
v-model="defaultTarBarConfig.active"
route
:active-color="defaultTarBarConfig.activeColor"
:inactive-color="defaultTarBarConfig.inactiveColor"
>
<van-tabbar-item
v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
:key="index"
replace
:name="item.label"
:icon="item.icon"
:to="item.routerPath"
>
{{item.label}}
</van-tabbar-item>
</van-tabbar>
</div>
</template>
<script>
export default {
props: {
tarBarConfig: {
type: Object,
required: true
}
},
name: "HomeTabBar",
data() {
return {
defaultTarBarConfig: {
tabBarItemList: [
// {
// label: "about", //文字标签
// routerPath: "/about", //路由
// icon: "home-o" //图标
// },
],
active: "", //默认激活的值 在item label中选择
activeColor: "#1989fa", //激活色
inactiveColor: "#7d7e80" // 未选中标签的颜色 000
}
};
},
methods: {
initDefaultTarBarConfig() {
this.defaultTarBarConfig = {
...this.defaultTarBarConfig,
...this.tarBarConfig
};
}
},
created() {
this.initDefaultTarBarConfig();
}
};
</script>
<style lang="less" scoped>
</style>

外面传的数据

tarBarConfig: {
tabBarItemList: [
{
label: "about",
routerPath: "/about",
icon: "home-o"
},
{
label: "goods",
routerPath: "/goods",
icon: "home-o"
},
{
label: "news",
routerPath: "/news",
icon: "home-o"
}
],
active: "news", //默认激活的值
activeColor: "#1989fa", //激活色
inactiveColor: "#7d7e80" // 未选中标签的颜色 000
}
};

vant ui TabBar封装的更多相关文章

  1. 自定义vant ui steps组件效果实现

    记录个问题,当作笔记吧:因为vue项目的移动端vant ui 的step组件跟ui设计图有差别,研究了半天还是没法使用step组件,只能手动设置一个 先上效果图和代码: (1)HTML部分 <d ...

  2. vue+element UI + axios封装文件上传及进度条组件

    1.前言 之前在做项目的时候,需要实现一个文件上传组件并且需要有文件上传进度条,现将之前的实现过程简单记录一下,希望可以帮助到有需要的人. 项目用的是Vue框架,UI库使用的是element UI,前 ...

  3. appium+python 【Mac】UI自动化测试封装框架流程简介 <一>

    为了多人之间更方便的协作,那么框架本身的结构和编写方式将变得很重要,因此每个团队都有适合自己的框架.如下本人对APP的UI自动化测试的框架进行进行了简单的汇总.主要目的是为了让团队中的其余人员接手写脚 ...

  4. appium+python 【Mac】UI自动化测试封装框架介绍 <二>---脚本编写(单设备)

    1.单设备的执行很简单,平时可多见的是直接在config中进行配置并进行运行即可.如下: # coding=UTF- ''' Created on // @author: SYW ''' from T ...

  5. Vant UI 安装

    一:安装 npm i vant -S 二.引入组件(共有三个方法) 方法一:使用 babel-plugin-import (推荐) 1. 安装 babel-plugin-import 插件 npm i ...

  6. Vant ui

    轻量.可靠的移动端 Vue 组件库 https://youzan.github.io/vant/#/zh-CN/intro postcss-pxtorem vue:将px转化为rem,适配移动端van ...

  7. 把项目中的vant UI组件升级

    首先把之前 的VANT 卸载掉 npm uninstall vant 然后重新安装 一次vant npm i vant -S

  8. Vant UI 组件库如何做rem适配?

    Vant是一款移动端基于vue的组件库,V2.1.1版本非常棒.文档地址:https://youzan.github.io/vant/?source=vuejsorg#/zh-CN/intro,那么V ...

  9. appium+python 【Mac】UI自动化测试封装框架介绍 <五>---脚本编写(多设备)

    目的: 通过添加设备号,则自动给添加的设备分配端口,启动对应的appium服务.注意:为了方便,将共用一个配置文件. 1.公共的配置文件名称:desired_caps.yaml platformVer ...

随机推荐

  1. 2020牛客多校第八场K题

    __int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...

  2. 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...

    在IDEA中将xxxMapper.xml文件创建在(src/main/java)目录中,运行报错:org.apache.ibatis.binding.BindingException: Invalid ...

  3. LinuX操作系统基础------>了解文件结构和相关的文件操作

    了解LinuX文件系统 熟悉LinuX的文件结构 熟悉LinuX的基本操作指令 利用所学指令进行指令组合操作 什么是文件?什么是目录? 文件:一般是一个独立的东西,可以通过某些工具将其打开 目录:可以 ...

  4. JS 仿京东放大镜

    css代码 body{ margin:; } .box { width: 1210px; position: relative; background-color: pink; margin: 0 a ...

  5. java流程控制语句if

    一 if语句 if语句是指如果满足某种条件,就进行某种处理. 格式: if (条件语句){ 执行语句; …… } 流程图: 例如: public class IfDemo01 { public sta ...

  6. 2020-04-11:A系统联机同步调用B系统(A和B不是同一公司系统,不能用分布式事务),如何保证系统间数据准实时一致性(设计思路即可)?提醒:需要考虑调用超时、并发、幂等、反交易先到等问题

    福哥答案2020-04-12: 可参考微信支付和支付宝支付.

  7. CPU:别再拿我当搬砖工了!

    数据搬运工 Hi,我是CPU一号车间的阿Q,有段日子没见面了. 还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU又拿硬盘和网卡开刀了!)之后,我们总算解放了,再也不用奔波于网卡.硬盘与内存之 ...

  8. 03 Arduino-模拟输出与PWM的操作方法

    在arduino开发板上面,标注为PWM的管脚的可以被当作数模转换管脚使用 01 模拟输出  analogWrite(pin, value) pin: 选定的引脚号码  value:取值范围 0-25 ...

  9. JS实例-DOM查询

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  10. 实体类转xml

    看项目中需要实体类转xml,大家是拼接的.感觉可以利用反射实现.于是写了下 代码如下 package com.kevin.util; import org.springframework.util.O ...