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

  1. <template>
  2. <div id="app">
  3. <home-tab-bar :tar-bar-config="tarBarConfig"></home-tab-bar>
  4. <router-view></router-view>
  5. </div>
  6. </template>

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

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

TabBar.vue

  1. <!-- 主页标签切换 -->
  2. <template>
  3. <div class="home-tab-bar">
  4. <van-tabbar
  5. v-model="defaultTarBarConfig.active"
  6. route
  7. :active-color="defaultTarBarConfig.activeColor"
  8. :inactive-color="defaultTarBarConfig.inactiveColor"
  9. >
  10. <van-tabbar-item
  11. v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
  12. :key="index"
  13. replace
  14. :name="item.label"
  15. :to="item.routerPath"
  16. >
  17. <span>{{item.label}}</span>
  18. <template #icon="props">
  19. <img :src="props.active ? item.icon.active : item.icon.inactive" />
  20. </template>
  21. </van-tabbar-item>
  22. </van-tabbar>
  23. </div>
  24. </template>
  25. <script>
  26. export default {
  27. props: {
  28. tarBarConfig: {
  29. type: Object,
  30. required: true
  31. }
  32. },
  33. name: "HomeTabBar",
  34. data() {
  35. return {
  36. defaultTarBarConfig: {
  37. tabBarItemList: [
  38. // {
  39. // label: "about", //文字标签
  40. // routerPath: "/about", //路由
  41. // icon: "home-o" //图标
  42. // },
  43. ],
  44. active: "", //默认激活的值
  45. activeColor: "#1989fa", //激活色
  46. inactiveColor: "#7d7e80" // 未选中标签的颜色 000
  47. }
  48. };
  49. },
  50. methods: {
  51. initDefaultTarBarConfig() {
  52. this.defaultTarBarConfig = {
  53. ...this.defaultTarBarConfig,
  54. ...this.tarBarConfig
  55. };
  56. }
  57. },
  58. created() {
  59. this.initDefaultTarBarConfig();
  60. }
  61. };
  62. </script>
  63. <style lang="less" scoped>
  64. </style>

index.js

  1. import HomeTabBar from './HomeTabBar'
  2.  
  3. export default {
  4. //Vue.use()方法就会自动执行install
  5. install(Vue) {
  6. Vue.component(HomeTabBar.name, HomeTabBar) //组建的名字和组件
  7. }
  8.  
  9. }
外面传的props tarBarConfig

  1. tarBarConfig: {
  2. tabBarItemList: [
  3. {
  4. label: "about",
  5. routerPath: "/about",
  6. icon: {
  7. active: require("assets/img/homeTabBar/aboutActive.png"),
  8. inactive: require("assets/img/homeTabBar/aboutInactive.png")
  9. }
  10. },
  11. {
  12. label: "goods",
  13. routerPath: "/goods",
  14. icon: {
  15. active: require("assets/img/homeTabBar/goodsAcitve.png"),
  16. inactive: require("assets/img/homeTabBar/goodsInacitve.png")
  17. }
  18. },
  19. {
  20. label: "news",
  21. routerPath: "/news",
  22. icon: {
  23. active: require("assets/img/homeTabBar/newsActive.png"),
  24. inactive: require("assets/img/homeTabBar/newsInactive.png")
  25. }
  26. }
  27. ],
  28. active: "news", //默认激活的值
  29. activeColor: "#1989fa", //激活色
  30. inactiveColor: "#7d7e80" // 未选中标签的颜色 000
  31. }

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

homeTabBar.vue

  1. <!-- 主页标签切换 -->
  2. <template>
  3. <div class="home-tab-bar">
  4. <van-tabbar
  5. v-model="defaultTarBarConfig.active"
  6. route
  7. :active-color="defaultTarBarConfig.activeColor"
  8. :inactive-color="defaultTarBarConfig.inactiveColor"
  9. >
  10. <van-tabbar-item
  11. v-for="(item, index) in defaultTarBarConfig.tabBarItemList"
  12. :key="index"
  13. replace
  14. :name="item.label"
  15. :icon="item.icon"
  16. :to="item.routerPath"
  17. >
  18. {{item.label}}
  19. </van-tabbar-item>
  20. </van-tabbar>
  21. </div>
  22. </template>
  23. <script>
  24. export default {
  25. props: {
  26. tarBarConfig: {
  27. type: Object,
  28. required: true
  29. }
  30. },
  31. name: "HomeTabBar",
  32. data() {
  33. return {
  34. defaultTarBarConfig: {
  35. tabBarItemList: [
  36. // {
  37. // label: "about", //文字标签
  38. // routerPath: "/about", //路由
  39. // icon: "home-o" //图标
  40. // },
  41. ],
  42. active: "", //默认激活的值 在item label中选择
  43. activeColor: "#1989fa", //激活色
  44. inactiveColor: "#7d7e80" // 未选中标签的颜色 000
  45. }
  46. };
  47. },
  48. methods: {
  49. initDefaultTarBarConfig() {
  50. this.defaultTarBarConfig = {
  51. ...this.defaultTarBarConfig,
  52. ...this.tarBarConfig
  53. };
  54. }
  55. },
  56. created() {
  57. this.initDefaultTarBarConfig();
  58. }
  59. };
  60. </script>
  61. <style lang="less" scoped>
  62. </style>

外面传的数据

  1. tarBarConfig: {
  2. tabBarItemList: [
  3. {
  4. label: "about",
  5. routerPath: "/about",
  6. icon: "home-o"
  7. },
  8. {
  9. label: "goods",
  10. routerPath: "/goods",
  11. icon: "home-o"
  12. },
  13. {
  14. label: "news",
  15. routerPath: "/news",
  16. icon: "home-o"
  17. }
  18. ],
  19. active: "news", //默认激活的值
  20. activeColor: "#1989fa", //激活色
  21. inactiveColor: "#7d7e80" // 未选中标签的颜色 000
  22. }
  23. };

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. Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

    T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi .于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现.定时任务执行以及签到提 ...

  2. Web测试转App测试不看不知道

    Web测试 Web通常指的是互联网应用系统,比如税务电子化征管档案系统.金融数据平台.餐饮商家管理后台等等,其实质是C/S的程序. C是Client--客户端,S是Server--服务器. Web中的 ...

  3. three.js 着色器材质之纹理

    今天郭先生说一说如何在three.js着色器中添加纹理,先看看今天要完成的效果,在线案例请点击博客原文. 这里我们分别引入三个纹理,分别是地球的表面纹理,对应的海拔灰度图,和云朵的纹理.使用表面纹理还 ...

  4. java类的定义与使用

    一 引用数据类型 1.引用数据类型的分类 我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包 含了很多的方法与属性,可供我们使用. ...

  5. C#LeetCode刷题之#59-螺旋矩阵 II(Spiral Matrix II)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3678 访问. 给定一个正整数 n,生成一 ...

  6. C#LeetCode刷题之#414-第三大的数(Third Maximum Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3710 访问. 给定一个非空数组,返回此数组中第三大的数.如果不存 ...

  7. windows下mongoDB的下载和安装

    1.进入mongoDB官网,官网地址:https://www.mongodb.com 2.  点击Try free按钮,进入下载页面 3.点击download进行下载:下载完成如下图: 4.点击下载的 ...

  8. Java并发---并发理论

    一.如何理解线程安全 在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题? 我的认识是.在多线程下代码执行的结果和预期的正确的结果不一致,该代码就是线程不安全的,否则就是线程安全的 在深 ...

  9. 推荐一看的blog

    不同专题: 个人blog cnblogs.com/MiLog cnblogs.com/Dway (指DeepWay) cnblogs.com/muly 建议一看,主要发布在cnblogs.com/dl ...

  10. IntelliJ IDEA安装Activiti插件并使用

    一.安装Activiti插件 1.搜索插件 点击菜单[File]-->[Settings...]打开[Settings]窗口. 点击左侧[Plugins]按钮,在右侧输出"actiBPM",点击 ...