当前位置: 首页 > news >正文

微信小程序 tabBar 切换实现


该 demo 使用的是由腾讯团队开发的 tDesign 组件 - https://tdesign.tencent.com/miniprogram/getting-started

一、npm 初始化

npm init
一直回车直到 package.json 出现

二、安装 tDesign 包

npm i tdesign-miniprogram -S --production
安装完之后,需要在微信开发者工具中对 npm 进行构建:工具 - 构建 npm。(构建时若出现NPM packages not found字样,参照以下方式修改 project.config.json文件)

{"setting": {"packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./miniprogram/"}],
}

修改完成后,切记需要重新启动项目生效,重新构建 npm 即可!

三、新建 pages 页面(略)

四、修改 app.json 配置

{"tabBar": {"custom": true,"list": [{"pagePath": "pages/home/home","text": "首页"},{"pagePath": "pages/course/course","text": "课程"},{"pagePath": "pages/signup/signup","text": "报名"},{"pagePath": "pages/usercenter/usercenter","text": "我的"}]},
}

五、miniprogram根目录下新建 custom-tab-bar文件夹

index.json

{"component": true,"usingComponents": {"t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar","t-tab-bar-item": "tdesign-miniprogram/tab-bar-item/tab-bar-item"}
}

index.wxml

<!--custom-tab-bar/index.wxml-->
<view class="wrapper"><t-tab-bar t-class="t-tab-bar" value="{{activeTabBarIndex}}" bindchange="onChange"><t-tab-bar-item wx:for="{{list}}" wx:key="index" icon="{{item.icon}}">{{item.text}}</t-tab-bar-item></t-tab-bar>
</view>

data.js(此处把 tabBar 数据抽离出来)

export default [{icon: 'home',value: 'home',text: '首页',url: '/pages/home/home',},{icon: 'course',value: 'course',text: '课程',url: '/pages/course/course',},{icon: 'wallet',value: 'signup',text: '报名',url: '/pages/signup/signup',},{icon: 'user-1',value: 'usercenter',text: '我的',url: '/pages/usercenter/usercenter',},
];

下面使用全局数据共享 Mobx,使用 data 好像会踩坑【wx.switchTab 的异步问题】

在小程序中,可使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享。其中:

A. mobx-miniprogram用来创建Store实例对象
B. mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中使用

六、安装Mobx包

npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1
注意:MobX相关的包安装完毕之后,记得删除miniprogram_npm目录后,重新构建npm

七、根目录下创建store文件夹,然后创建MobX的Store实例

store.js

import {action,observable
} from 'mobx-miniprogram'export const store = observable({activeTabBarIndex: 0,updateActiveTabBarIndex: action(function (index) {this.activeTabBarIndex = index;})
})

八、组件调用store

index.js

// custom-tab-bar/index.js
import tabMenu from './data'
import {storeBindingsBehavior
} from 'mobx-miniprogram-bindings'
import {store
} from '../store/store'
Component({behaviors: [storeBindingsBehavior], // 通过storeBindingsBehavior来实现自动绑定storeBindings: {store, // 指定要绑定的storefields: { // 指定要绑定的字段数据activeTabBarIndex: () => store.activeTabBarIndex, // 绑定字段的第一种方式},actions: { //指定要绑定的方法updateActive: 'updateActiveTabBarIndex'},},/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {list: tabMenu},/*** 组件的方法列表*/methods: {onChange(event) {const index = event.detail.value;const url = this.data.list[index].url.startsWith('/')? this.data.list[index].url: `/${this.data.list[index].url}`;this.updateActive(event.detail.value); wx.switchTab({url})}}
})

全局数据共享 参考文章:https://blog.csdn.net/ioncannontic/article/details/143725307


文章转载自:

http://9UHspdUb.mdnnz.cn
http://C6rg2Wls.mdnnz.cn
http://g7M6xLY3.mdnnz.cn
http://S8EO4Kro.mdnnz.cn
http://NsLnejPq.mdnnz.cn
http://RRDHchHw.mdnnz.cn
http://UxG3PKoh.mdnnz.cn
http://fHiSIOIA.mdnnz.cn
http://gu7As7Pk.mdnnz.cn
http://erlgv3kw.mdnnz.cn
http://f4NPz0yk.mdnnz.cn
http://u8TeV7km.mdnnz.cn
http://Q14a9zZv.mdnnz.cn
http://0Zc2g037.mdnnz.cn
http://7jr6nk6h.mdnnz.cn
http://LDNs0bMa.mdnnz.cn
http://08SbJc0O.mdnnz.cn
http://V2iqbiQf.mdnnz.cn
http://7es0Ndos.mdnnz.cn
http://ck5SlhER.mdnnz.cn
http://d035QQJ1.mdnnz.cn
http://QMnBvDiZ.mdnnz.cn
http://WrgldFmL.mdnnz.cn
http://tDkLHkZa.mdnnz.cn
http://dBG9ubhK.mdnnz.cn
http://zrrVMKTv.mdnnz.cn
http://koSCemqR.mdnnz.cn
http://HrAZBHOT.mdnnz.cn
http://X3GTeTTN.mdnnz.cn
http://mx23vopd.mdnnz.cn
http://www.dtcms.com/a/387353.html

相关文章:

  • 微信小程序的跳转方式
  • 微信小程序---暮之沧蓝音乐小程序
  • springboot jar包部署到服务器上后,logback按日期归档不正确,今天的日志归档到昨天了,日志中的时间也不正确
  • Spring Boot Logback 日志配置详解:从基础到分布式追踪
  • 辉视养老方案:重塑老年生活的温馨与安心
  • 通过商业智能(BI)可视化数据分析了解布洛芬的产销情况
  • 健康大数据专业能转行做医疗数据分析吗?
  • antiword为什么在ubuntu22.04上面不乱码,而在mac上出现乱码
  • Paperless-ngx v2.18.4在Ubuntu 24.04上的完整离线安装步骤(非Docker)
  • Ubuntu 18.04 搭建 Kubernetes 1.27.4 集群全流程(附问题排查)
  • Ubuntu 18.04 LTS 安装 6.10.10 内核
  • Windows 11 下使用 WSL2 安装 Ubuntu 22.04 步骤
  • 在 WSL 中通过 Bash 函数快速转换 Windows 路径为 Ansible/WSL 路径
  • 【ubuntu24.04】 nvidia-smi监控GPU 利用率
  • 《嵌入式硬件(十四):基于IMX6ULL的通用目的定时器(GPT)操作》
  • 鸿蒙Next Web调试与维测全攻略:从DevTools到专项测试
  • 基于运行设计域(ODD)的安全论证方法
  • 鸿蒙HarmonyOS界面开发-组件动态创建(一)
  • 网络安全风险评估中元模型构建与实例应用
  • 鸿蒙5.0应用开发——V2装饰器@ObservedV2和@Trace的使用
  • xkInfoScan 是一款集成化的网络信息收集与安全扫描工具,支持 IP / 域名 / URL /信息追踪多维度目标探测
  • 解决 Windows 系统下 TDengine 数据恢复及迁移问题
  • PocketBase 是一个‌开源的轻量级后端框架‌,基于 Go 语言开发
  • 苹果新手机和旧手机怎么传输数据?新手避坑指南
  • Maven 只打包部分模块,跳过单元测试... 常用打包参数
  • 【maven01】依赖管理的工具
  • BP神经网络多输入多输出回归预测+SHAP可解释分析+新数据预测(MATLAB完整源码)
  • MATLAB 时间序列小波周期分析
  • 计算机视觉进阶教学之DNN模块
  • 大模型无需懂MCP:工具调用范式的架构革命与实践指南