赞
踩
官方文档:https://developers.weixin.qq.com/miniprogram/dev/extended/weui/tabbar.html
官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
以下是处理方式:
/** * tabbar动态设置功能封装 * * 需要在所有tabbar页的 onShow 方法里调用一下 updateBarItemAll()方法 */ /** * tabbar原始配置 * 和app.json保持一致 * icon图片需使用网络地址 */ const originData = [ { "pagePath": "pages/index/index", "iconPath": "https://static.com/tabbar/home.png", "selectedIconPath": "https://static.com/tabbar/home_selected.png", "text": "首页" }, { "pagePath": "pages/wo/wo", "iconPath": "https://static..com/tabbar/wo.png", "selectedIconPath": "https://static.com/tabbar/wo_selected.png", "text": "我的" } ] export default { originData, latestData, // 单例模式获取数据 getTabbarData () { if (!this.latestData) { this.latestData = JSON.parse(JSON.stringify(originData)) } return this.latestData }, /** * 动态设置单项tabbar的图标文案 */ setBarItem ({ index, text, iconPath, selectedIconPath, }) { const item = { text, iconPath, selectedIconPath, } // 更新tabbarData单例 const tabbarData = this.getTabbarData() tabbarData[index].text = item.text tabbarData[index].iconPath= item.iconPath tabbarData[index].selectedIconPath= item.selectedIconPath // 只在当前为tabbar页时才应用修改 const isTabbar = this.isInTabbarPage() if (isTabbar) { this.updateBarItem(index, item) } }, /** * 更新所有tabbar项 */ updateBarItemAll () { const tabbarData = this.getTabbarData() tabbarData.forEach((v, i) => { this.updateBarItem(i, v) }) }, /** * 更新单项tabbar */ updateBarItem (index, item) { wx.setTabBarItem({ index: index, text: item.text, iconPath: item.iconPath, selectedIconPath: item.selectedIconPath, }) }, /** * 判断是否是tabbar页面 */ isInTabbarPage (path) { const tabbarData = this.getTabbarData() const tabbarRoutes = tabbarData.map(v => v.pagePath) if (!path) { const currentPages = getCurrentPages() const page = currentPages[currentPages.length - 1] if (!page) { return true } else { path = page.route } } if (path.match(/^\//)) { path = path.slice(1) } const isIn = tabbarRoutes.indexOf(path) > -1 return isIn }, }
上述封装的是设置指定某一下标的tabbar项,后续可以考虑对setBarItem做个封装修改,支持通过类型来指定设置某一tabbar,比如指定设置“我的”这一项,这样在tabbar后续调整顺序时就不需要修改index参数。
还可以对wx.setTabBarStyle也做个类似的封装,以支持部分样式的动态修改,这里不再赘述了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。