四时宝库

程序员的知识宝库

微信小程序底部导航集成Vant Weapp的tabbar

最近项目中涉及到微信小程序开发,比较了一下,最终选择了Vant Weapp这个UI框架。搞到底部导航自定义这块的时候,把我拦住了,弄了很久才完全解决了问题,实现了预期效果。可能是因为我是个伪全栈程序员,前端造诣太浅,这里记录下实现方式,以备后面再用到时,可以翻阅,同道中人们看到了,也可以少走弯路。

第一步,利用Vant Weapp里面的tabbar组件二次封装成自己的组件

1)创建组件目录,命名为custom-tab-bar,据说这个名字必须这么命名,小程序官方规定的,大家就按照这个来吧,没必要改成其他的了。


2)在组件内创建页面,命名为index,如图


3)按要求修改组件内各个文件

3.1 修改index.json文件,引入组件依赖,注意截图的红框框出的部分,必须申明这是个组件,"component": true。


3.2 修改index.wxml页面,放上组件代码。里面涉及到一些变量和事件回调函数,会在下一步提供。



3.3 修改index.js文件,添加数据active和list和事件回调函数onChange。其中list里面路径pagePath需要注意,前面需要加上/。onChange是tab切换的时候的回调,init函数后续会用到。

Component({
  data: {
    active: 0,
    list: [{
        pagePath: "/pages/index/index",
        text: "首页",
        icon: "home-o"
      },
      {
        pagePath: "/pages/order/index",
        text: "订单",
        icon: "orders-o"
      },
      {
        pagePath: "/pages/mine/index",
        text: "我的",
        icon: "user-o"
      }
    ]
  },
  methods: {
    onChange(e) {
      wx.switchTab({
        url: this.data.list[e.detail].pagePath,
      })
    },
    init() {
      const page = getCurrentPages().pop()
      this.setData({
        active: this.data.list.findIndex(item => item.pagePath === `/${page.route}`)
      })
    }
  }
});

到这里为止,我们的自定义组件就完成了。

第二步,使用自定义组件tabbar

1) 在app.json文件中增加配置tabbar, 如图,注意,配置下必须要有"custom": true,然后需要有配置下list,这里填下pagePath和text属性就足够了,注意,pagePath的路径前面没有/。



2) project.config.json文件配置修改


到这一步,你的组件应该能显示出来了,来展示下吧


到这里还没完,你会发现切换导航的时候,对应的导航项,并没有高亮显示。下一步我们就来解决这个问题,继续优化。

第三步,各个页面中调用组件方法,设置当前导航项高亮。

其实,这一步也很简单,就是在各个导航涉及的页面的生命周期函数onShow中,调用组件的init方法。简单不意味着就不会犯错,我就犯了一个很低级的错误,搞了大半天才发现问题所在。我犯的错误是onShow方法定义了两遍,由于js代码文件太长,超过一屏,我在增加代码的时候,没看到系统给我们默认增加的onShow函数,在上面自己重新定义了一个,导致系统定义的函数覆盖了我增加写的内容,执行的时候,肯定达不到预期效果。

细心,细心,细心,重要的事情,说多少遍都不为过。






喜欢我的分享的话,就关注我吧。我目前是一个自由职业者,我会持续分享IT技术相关,创业相关的心路历程,希望对大家有价值,与大家一起成长。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接