微信小程序-自定义tabBar
创始人
2024-11-19 13:36:01
0次

通过官网给出的示例自己实现了自定义的tabBar,但结果发现

无法监听页面生命周期函数

结语:原想的是实现不一样的效果(如下)

故尝试了自定义tabBar,虽然做出来了,但也发现这个做法存在不足:

在页面js文件中,需要给出以下代码:

Component({   pageLifetimes: {     show() {       if (typeof this.getTabBar === 'function' &&         this.getTabBar()) {         this.getTabBar().setData({           selected: 0		// 对应tabBar的下标         })       }     }   },   data: {     navBarHeight: getApp().globalData.navBarHeight,   }, })

相当于将原来的page页面更改为组件components

这样做的结果就是无法监听页面生命周期函数(至少在创建page时自带的生命周期函数均无法监听)

这是我遇到的,若有解决方案,欢迎留言告知

实现步骤

官方文档:基础能力 / 自定义 tabBar (qq.com)

1.app.json配置tabBar

"tabBar": {     "custom": true,     "color": "#a5abbd",     "selectedColor": "#1dba73",     "backgroundColor": "#ffffff",     "list": [{       "pagePath": "pages/home/home",       "text": "首页"     },{       "pagePath": "pages/index/index",       "text": "测试"     }]   }

注意:此处path不写最前面的 /

2.在项目根目录下添加文件夹custom-tab-bar,并添加组件,命名为index(下面的代码均借鉴官方demo,可自行修改)

项目文件夹如下:

index.js:

Component({   data: {     selected: 0,     color: "#a5abbd",     selectedColor: "#1dba73",     list: [{       pagePath: "/pages/home/home",       iconPath: "/images/icon/home.svg",       selectedIconPath: "/images/icon/home-selected.svg",       text: "首页"     }, {       // 此处path必须加前面的/,否则在切换tabbar时,会自动拼接地址,导致传入url有误,系统没有任何效果       pagePath: "/pages/index/index",       text: "测试"     }]   },    methods: {     switchTab(e) {       const data = e.currentTarget.dataset       const url = data.path       // wx.switchTab切换tabBar组件,可传入url,success,fail,此处简写       wx.switchTab({url})       // 完整写法       // wx.switchTab({       //   url: url,       //   success(res){console.log(res)},       //   fail(error){console.log(error)}       // })       this.setData({         selected: data.index       })     }   } })

注意:此处path必须加前面的/,否则在切换tabbar时,会自动拼接地址,导致传入url有误,系统没有任何效果

index.json:

{   "component": true }

index.wxml:

      {list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">     {selected === index ? item.selectedIconPath : item.iconPath}}">     {selected === index ? selectedColor : color}}">{{item.text}}    

index.wxss:

.tab-bar {   position: fixed;   bottom: 0;   left: 0;   right: 0;   height: 48px;   background: white;   display: flex;   padding-bottom: env(safe-area-inset-bottom); }  .tab-bar-border {   background-color: rgba(0, 0, 0, 0.33);   position: absolute;   left: 0;   top: 0;   width: 100%;   height: 1px;   transform: scaleY(0.5); }  .tab-bar-item {   flex: 1;   text-align: center;   display: flex;   justify-content: center;   align-items: center;   flex-direction: column; }  .tab-bar-item image {   width: 27px;   height: 27px; }  .tab-bar-item view {   font-size: 10px; }

到此处应该就会出现tabBar且可点击,点击时也能切换页面

但可能出现问题:一个tabBar要点击两次才能更改样式(即tabBar与页面未连接)

解决:

在页面的js文件中:

Component({   pageLifetimes: {     show() {       if (typeof this.getTabBar === 'function' &&         this.getTabBar()) {         this.getTabBar().setData({           selected: 0		// 对应tabBar的下标         })       }     }   },   data: {     navBarHeight: getApp().globalData.navBarHeight,   }, })

至此,自定义tabBar便完成了,但就像我前面说的,如此修改之后,无法监听页面的生命周期函数,大家自行判断是否需要自定义tabBar,或者有更好解决方案的,欢迎评论区交流

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...