当前位置:   article > 正文

微信小程序如何设置自定义tabBar_微信小程序自定义tabbar页面

微信小程序自定义tabbar页面

1、创建文件

        在文件根目录创建组件名字为:custom-tab-bar(指定名称)

2、配置app.json

        添加custom属性,让其自定义

  1. "tabBar": {
  2. "custom": true,
  3. "list":[....]
  4. }

        此时保存后 tabbar 区域中就是组件中的内容了

3、配置组件内容

        在这里我们使用vantweapp 来演示

        ①、在app.json中 引入全局组件

  1. "usingComponents": {
  2. "van-tabbar": "@vant/weapp/tabbar/index",
  3. "van-tabbar-item": "@vant/weapp/tabbar-item/index"
  4. }

       ②、在index.wxml 中应用vant

  1. <van-tabbar active="{{ active }}" bind:change="onChange">
  2. // 遍历内容
  3. <van-tabbar-item info="3" wx:for="{{list}}" wx:key="index" >
  4. <image
  5. slot="icon"
  6. src="{{ item.iconPath }}"
  7. mode="aspectFit"
  8. style="width: 30px; height: 25px;"
  9. />
  10. <image
  11. slot="icon-active"
  12. src="{{ item.selectedIconPath }}"
  13. mode="aspectFit"
  14. style="width: 30px; height: 25px;"
  15. />
  16. {{item.text}}
  17. </van-tabbar-item>
  18. </van-tabbar>

        ③、index.js 部分逻辑

  1. Component({
  2. data: {
  3. active: 0,
  4. list: [{.....}],
  5. methods: {
  6. onChange(event) {
  7. this.setData({
  8. active: event.detail
  9. });
  10. // 切换页
  11. wx.switchTab({
  12. url: this.data.list[event.detail].pagePath,
  13. })
  14. },
  15. }
  16. )}

注意:此时已经可以正常切换页面了,但是会出现问题,点击更换pages后,高亮存在问题

分析:每次切换pages 会导致重新创建一个tabbar组件,他用来控制的active 不受切换前的修改逻辑影响,既:修改的为切换前的tabbar组件的tabbar

4、解决高亮BUG

        方法一:切换时加载后更新active

        每次在页面显示的时候,通过getTabbar() 方法获取实例修改

  1. onShow: function () {
  2. this.getTabBar().setData({
  3. // 根据list 的索引
  4. active: 1
  5. })
  6. },

        方法二:使用数据共享

        ①、在组件的js 文件中配置共享

  1. import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
  2. import {store} from '../store/store'
  3. Component({
  4. behaviors:[storeBindingsBehavior],
  5. storeBindings:{
  6. store,
  7. fields:['active'],
  8. actions:['updateActive']
  9. },
  10. methods: {
  11. onChange(event) {
  12. // this.setData({
  13. // active: event.detail
  14. // });
  15. // 触发修改共享数据的方法,并将当前的index 传递进去
  16. this.updateActive(event.detail)
  17. wx.switchTab({
  18. url: this.data.list[event.detail].pagePath,
  19. })
  20. },
  21. }
  22. })

        ②、在store中 设置active 保存选中的页面

  1. export const store = observable({
  2. active:0,
  3. // ....
  4. // 更新当前点击的索引标识符
  5. updateActive:action(function(val){
  6. this.active = val
  7. })
  8. })

此时就可以正常显示了,但是有闪烁的情况发生

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/96887
推荐阅读