• 我用的是 Vant Weapp  UI组件库,
  • 需要用store 全局共享数据 解决tabbar切换激活样式问题

关于如何使用 Mobx,创建store可参考:微信小程序 Mobx实现数据共享(创建store数据共享 + 页面、组件间的数据传递)_Shimeng_1989的博客-CSDN博客

自定义tabbar 步骤:

  1. 在app.json中,开启自定义tabbar设置

    // 以下内容可参考 小程序文档 -- 自定义tabbar
    //     1.在package.json 文件中找到/新增 tabBar对象
    //     2.添加custom:true 设置
    //     3.开启自定义tabbar后,在根目录创建 custom-tab-bar 文件夹(名字必须叫这个)。
    //     4.在此文件夹下创建 index.wxml、index.js、index.wxss、index.json 四个文件
    //      (可以将鼠标放在文件夹上,右键 -- (选择)创建component(命名index) -- 回车,则会自从创建这四个文件)  "tabBar": {"custom": true, // 开启自定义tabbar配置"list": [{ // list不需要删掉 -- 为了向下兼容老版tabbar"pagePath": "pages/index/index","text": "首页","iconPath": "/images/1.png","selectedIconPath": "/images/2.png"}, {"pagePath": "pages/request/request","text": "请求","iconPath": "/images/1.png","selectedIconPath": "/images/2.png"}]},
  2. 创建自定义 tabbar 对应文件:( 以下内容可参考 小程序文档 -- 自定义tabbar)
    1. 在package.json 文件中找到/新增 tabBar对象
    2. 添加custom:true 设置
    3. 开启自定义tabbar后,在根目录创建 custom-tab-bar 文件夹(名字必须叫这个)
    4. 在此文件夹下创建 index.wxml、index.js、index.wxss、index.json 四个文件。 (可以将鼠标放在文件夹上,右键 -- (选择)创建component(命名index) -- 回车,则会自从创建这四个文件)
  3. index.wxml文件:

    <!-- 可根据项目具体情况,参考Vant Weapp官方文档中的配置修改 -->
    <!--  active : 选中 tabbar 的下标 ,info:是否显示消息数量(''/0,则不显示) -->
    <!-- for 循环 tabbar数组 -->
    <van-tabbar active="{{ active_index }}" bind:change="onChange"><van-tabbar-item wx:for="{{list}}" wx:key="index" info="{{item.info||''}}"><imageslot="icon"src="/images/1.png"mode="aspectFit"style="width: 30px; height: 18px;"/><imageslot="icon-active"src="/images/2.png"mode="aspectFit"style="width: 30px; height: 18px;"/>{{item.text}}</van-tabbar-item>
    </van-tabbar>
  4. index.js文件:

    // .js文件
    /* 注意:!!!每次切换页面时,更新到跳转页面后会刷新active值(我猜的)。所以每次跳转完成后,都会回到 首页(active_index: 0) 的激活状态。因此,要将 active_index (选中tabbar下标)放到store全局数据中。每次跳转时,更新active_index值,激活状态则可保留在当前跳转页的tabbar上。
    */
    import { storeBindingsBehavior } from "mobx-miniprogram-bindings"
    import { store } from '../store/store'
    Component({options: {styleIsolation: 'shared', //设置为shared,修改 Vant Weapp UI组件库中的样式才能生效},behaviors: [storeBindingsBehavior], // 通过 storeBindingsBehavior 来实现自动绑定storeBindings: {store, // 指定要绑定的 storefields: { // 指定要绑定的字段数据active_index:'tabbar_active_index',// 获取 store 中,tabbar选中的下标num1:'store.store_count1', // 获取list中 首页的 info(消息条数)count_sum: 'store_count_sum' // 获取list中 请求的 info(消息条数)},actions: { // 指定要绑定的方法update_tabbarIndex: 'update_Tabbar_active_index' // 更新 tabbar选中的下标}},//  监听 store中值的修改,更新list中的info消息数量observers: {'num1,count_sum': function (num, sum) {// 更新list中的info数量this.setData({'list[0].info': num,'list[1].info': sum,})}},data: {// active_index: 0, // 每次切换页面时,更新为更新跳转页面后会刷新active值(我猜的),所以每次都会回到首页(下标0)的激活状态。所以要将此字段放到store全局数据中,每次跳转时修改当前值,则可保留在跳转页tabbar激活状态上。list: [{"pagePath": "pages/index/index","text": "首页",info: 0,"iconPath": "/images/1.png","selectedIconPath": "/images/2.png"}, {"pagePath": "pages/myfood/myfood","text": "myfood","iconPath": "/images/1.png","selectedIconPath": "/images/2.png"}]},/*** 组件的方法列表*/methods: {onChange(event) {// event.detail 的值为当前选中项的索引// this.setData({ active_index: event.detail});// 不在此文件data中声明了,所以不需要setData更新值了。改为触发 store 的 action 中的方法修改store中的 active_index (tabbar_active_index) 了this.update_tabbarIndex(event.detail)//更新 store 中 tabbar_active_index(active_index)的值// 跳转到对应tabbar的页面wx.switchTab({url: `/${this.data.list[event.detail].pagePath}`,})},}
    })
  5. store.js文件:(公共数据文件)

    // store.js文件
    /* 创建store实例对象:* observable 中添加字段、计算属性、方法等* 计算属性:用get定义,( 且只读,不能修改 )* action方法:修改store中的值*/
    import {observable,action
    } from 'mobx-miniprogram'export const store = observable({// 字段/数据store_count1: 1,store_count2: 2,tabbar_active_index: 0, // tabbar选中的下标// 计算属性:用get定义,(只读不能修改)get store_count_sum() {return this.store_count1 + this.store_count2},// action方法:用来修改store中的值update_storecount1: action(function (step) {this.store_count1 += step}),// 更新tabbar选中下标update_Tabbar_active_index: action(function (activeIndex) {this.tabbar_active_index = activeIndex})
    })

小程序 自定义tabbar + 自定义tabbar样式 + tabbar切换激活样式问题相关推荐

  1. 微信小程序用vant自定义tabbar页面并跳转相应页面

    0.前置安装 步骤一 安装 vant 组件库 npm i @vant/weapp -S --production 下载完后要npm构建才能使用 步骤二 修改 app.json 将 app.json 中 ...

  2. 微信小程序 - 进阶(自定义组件、promis化、mobx、分包、自定义tabBar)

    文章目录 一.自定义组件 1.创建组件 2.引用组件 3.组件和页面区别 4.组件样式 5.data.methods.properties 6.小程序的 data 和 properties 区别 7. ...

  3. 微信小程序底部实现自定义动态Tabbar

    多图警告!!! 最近在工作中遇到这样一个需求:微信小程序底部的Tab需要通过判断登录人的角色动态进行改变,想要实现这个功能依靠小程序原生的Tabbar是不可能实现的了,所以研究了一下自定义Tab,这里 ...

  4. 微信小程序入门二:底部导航tabBar

    小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...

  5. 手把手教你实现小程序中的自定义组件

    之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 1.6.3 开始,官方对于 ...

  6. f2 柱状图滚动 钉钉小程序_详解钉钉小程序组件之自定义模态框(弹窗封装实现)...

    背景 开发钉钉小程序中需要用到模态框 文档里也没有 自己搞一个- 效果大概长这个样 点击指定按钮,弹出模态框,里面的内容可以自定义,可以是简单的文字提示,也可以输入框等复杂布局.操作完点击取消或确定关 ...

  7. 小程序分享如何自定义封面?

    小程序分享如何自定义封面? onShareAppMessage(options) 在 Page 中定义 onShareAppMessage 函数,设置该页面的转发信息. 只有定义了此事件处理函数,右上 ...

  8. 微信小程序之callout自定义气泡

    最近闲着踩踩地图的坑,一脚下去差点没从坑里爬起来,然后由于某个原因,去研究了微信小程序里面地图callout 这个属性 callout呢,是在标记的点上面显示 一个 气泡,作为提示用 最后展示下 效果 ...

  9. Taro编译微信小程序实现顶部自定义导航栏

    [需求] 使用taro开发微信小程序的过程中,涉及到小程序的需要自定义顶部导航栏(导航栏渐变色),微信小程序中只能够设置固定的颜色,渐变颜色以及添加其他按钮的操作就不能够通过小程序自带的api来实现 ...

最新文章

  1. python socket编程:实现redirect函数、cookie和session
  2. 红队技巧-域渗透的协议利用
  3. 自身经历第二次面试(阿里)
  4. mysql视图表修复_mysql中含有视图数据库在恢复数据时视图变成数据表的解决方法...
  5. 打开计算机属性的命令,电脑双击打开的是属性怎么办
  6. 第十周学习总结--助教
  7. ssm框架整合_框架整合战斗压缩粮篇SpringCloud+SpringBoot+SSM
  8. 蜘蛛侠的入侵:互联网公司robots协议法律指南
  9. 软考备考-系统构架师-21-系统架构师考纲整理
  10. 采用KubeSphere的kk,部署安装多节点服务的kubernetes-v1.18.6和kubesphere-v3.0.0的踩坑过程记录,及反思
  11. 论文浏览(45) MiCT: Mixed 3D/2D Convolutional Tube for Human Action Recognition
  12. 字符集和字符集编码详解
  13. 美团的2020年:千亿美元帝国的贪吃蛇游戏,气势汹汹也危机重重
  14. 一、mybatis-generator
  15. 系统学习做汉堡_您如何学习策略设计模式? 做一个汉堡!
  16. 长方形纸做容积最大的长方体_探究无盖长方体的最大容积
  17. 如何生成一个好的appkey和appsecret
  18. linux版cs中文版下载,在linux下也能玩CS游戏了 呵呵~~
  19. Java 利用http协议与Domino实现sso单点登录
  20. 前端js获取当前时间的方法

热门文章

  1. 秒杀和抢单系统的设计思路
  2. lvs+keepalive
  3. 软件负责读取并执行计算机的指令,电脑的CPU是指什么
  4. 银河系列超级计算机处理器,龙芯到底算什么CPU,通用还是专用?中国的“银河”系列超级计算机用的不是自己的CPU吗(不是说龙芯)...
  5. 牵牛登陆显示服务器错误怎么回事,springMVC-错误消息的显示和国际化
  6. 去除pdf转word后 空格和长空格,统一处理格式
  7. B-Spline曲线拟合
  8. 泰凌微8258入门教程 基础篇⑦——Flash结构和OTA流程
  9. Ringbahn是无船同志(without boats)基于io-uring 的 安全Rust 绑定(第一篇)
  10. c语言制作飞机大战试训报告,c语言飞机大战源代码.doc