小程序自定义tabbar

2,716 阅读2分钟

在这里,我是使用vant-app的tabbar组件为例,替换小程序原生的tabbar

第一、在使用npm下载vant-app的组件

npm i vant-weapp

第二、在app.json配置tabbar配置信息

"tabBar": {    "custom": true,    "list": [      {        "pagePath": "pages/index/index",        "text": "待办"      },      {        "pagePath": "pages/inProcess/index",        "text": "进行"      },      {        "pagePath": "pages/me/index",        "text": "我的"      }    ]  }

注意:需要设置 custom 为 true

第三、创建响应自定义的组件来替换小程序原生的tabbar

在小程序根目录创建custom-tab-bar文件夹,里面放的是你需要自定义的tabbar组件,我的文件目录跟内容是这样子的


  • custom-tab-bar/index.js
    • Component({  /**   * 组件的初始数据   */  data: {    active: 0  },  /**   * 组件的方法列表   */  methods: {    onChange: function (event) {
            // event.detail是vant-app的tabbar组件选择的序号,相当于获取点击van-tabbar-item的序号      if (event.detail == 2) {        this.switchTab("/pages/me/index")        this.setData({          active: event.detail        })      } else if (event.detail == 1) {        this.switchTab("/pages/inProcess/index")        this.setData({          active: event.detail        })      } else {        this.switchTab("/pages/index/index")        this.setData({          active: event.detail        })      }    },    switchTab: function (url, callback) {      if (!callback) {        callback = res => { }      }      callback()      wx.switchTab({        url      })    }  }})

  • custom-tab-bar/index.json
    • {  "component": true,  "usingComponents": {    "van-tabbar": "vant-weapp/tabbar/index",    "van-tabbar-item": "vant-weapp/tabbar-item/index"  }}

  • custom-tab-bar/index.wxml
    • <!--miniprogram/custom-tab-bar/index.wxml--><van-tabbar active="{{ active }}"  active-color="#07c160"  inactive-color="#000"  bind:change="onChange">  <van-tabbar-item class="tabbar" icon="clock-o">待办</van-tabbar-item>  <van-tabbar-item class="tabbar" icon="passed">完成</van-tabbar-item>  <van-tabbar-item class="tabbar" icon="user-o">我的</van-tabbar-item></van-tabbar>

第四、在相应的tabbar页面设置好tabbar的初始化参数

比如说,我想要跳转到/pages/me/index的tabbar页面,就需要在/pages/me/index.js文件中加入下面代码

onShow: function() {    if (typeof this.getTabBar === 'function' &&      this.getTabBar()) {      this.getTabBar().setData({        active: 2      })    }  }

this.getTabBar:返回当前页面的 custom-tab-bar 的组件实例

如果不设置这一步,使用vant-app的tabbar组件替换小程序的tabbar,会发生tabbar组件响应的激活样式不能及时地更新