当前位置:   article > 正文

动态切换底部导航栏及指定页面内容(uniapp开发小程序)_uni.settabbaritem

uni.settabbaritem

踩坑:uni.setTabBarItem(OBJECT)方法,官方提供,在适配小程序上时,参数pagePath,visible均无法使用

一.需求:

        添加开关,用于控制页面显示隐藏

二.实现:uniapp+vux+switch组件

三.思路:

1)思路一:

进入小程序首页时,通过vux存储全局判断Flag,使用自定义组件替换原生组件。点击开关,实现Tab栏动态切换,达到指定页面隐藏/显示效果。

1.引入switch组件,引入自定义tab组件

2.使用vuex

3.参考地址:uniapp根据用户权限动态改变tabBar的数量和内容 - 我的世界蹦擦擦 - 博客园 (cnblogs.com)

注:目前这个思路会出现底部导航栏闪烁问题,需另行解决。这个思路已舍弃,代码已删除,采用思路二

2)思路二:

将需替换页面封装成组件,将替换页面封装为组件。进入小程序首页时,通过vux存储全局判断Flag。通过全局Flag,结合uniapp中uni.setTabBarItem(OBJECT)方法切换tab栏文字和标题,同时判断,进行组件之间切换。点击开关实现tab栏图标文字及页面切换效果。.配置vuex : uniapp中已经集成了vuex,我们直接用就可以

1. 配置vuex

        uniapp中已经集成了vuex,我们直接用就可以。在store文件下创建index.js

        1)state中:

  1. // 用于判断发现页面显示内容
  2. foundShowContentFlag:true,
  3. // 用于判断发现页面显示内容
  4. globalFoundFlag:true,

        3) mutations中:

  1. // 设置发现页显示判断标志
  2. setFoundShowContentFlag(state, val){
  3. state.foundShowContentFlag = val
  4. },
  5. // 用于判断发现页面显示内容
  6. setGlobalFoundFlag(state, val){
  7. state.globalFoundFlag = val
  8. },

2.引入switch开关组件,使用

  1. <yjy-switch
  2. v-if="!edit"
  3. class="tab-found"
  4. @switchFunction="switchFunction"
  5. :switchType="'text'"
  6. :defaultColor="'#E13500'"
  7. :highColor="'#FFFFFF'"
  8. :defaultValue="foundFlag"
  9. :itemIndex="1">
  10. </yjy-switch>

3.switchFunction()点击执行函数

        开关点击后:设置判断Flag 

  1. // 发现页面开关
  2. switchFunction(){
  3. let foundCode = 0
  4. // 设置开关状态
  5. foundCode = this.foundFlag ? 0 : 1
  6. // 设置状态,控制发现页是否显示
  7. // showDiscoverStatus //开关状态 0/1
  8. // shopId //店铺id
  9. this.$request.urlRequest(
  10. "/shop/shop/updateShowDiscoverShopStatus?showDiscoverStatus="+ foundCode
  11. +"&shopId="+this.getShopOccupyId,
  12. {},
  13. "POST",
  14. (res)=>{
  15. if(res.code==200){
  16. this.$api.msg(!this.foundFlag?"发现开启成功":"发现关闭成功");
  17. // 设置开关状态
  18. this.foundFlag = !this.foundFlag
  19. this.setFoundShowContentFlag(this.foundFlag)
  20. //console.log("foundShowContentFlag++"+this.foundShowContentFlag)
  21. // 设置成功后进行更改
  22. if (this.foundShowContentFlag) {
  23. uni.setTabBarItem({
  24. index: 1,
  25. text: '发现',
  26. iconPath: 'static/tab-cate.png',
  27. selectedIconPath: 'static/tab-cate-current.png'
  28. })
  29. } else {
  30. uni.setTabBarItem({
  31. index: 1,
  32. text: '订单',
  33. iconPath: 'static/tab-order.png',
  34. selectedIconPath: 'static/tab-order-current.png'
  35. })
  36. }
  37. }
  38. })
  39. }

4.index首页配置

        onload中:小程序每次进入时都要先获取一遍参数配置,然后初始化页面

  1. // 查询底部导航栏是否显示发现页 0关 1开
  2. this.$request.urlRequest(
  3. "/shop/shop/getShopById?id=" + shopId, {},
  4. "GET",
  5. (res) => {
  6. if (res.code == 200) {
  7. // 设置底部显示发现否
  8. if (res.result.showDiscover == 0 && res.result.showDiscover != null) {
  9. this.setFoundShowContentFlag(false)
  10. // 设置底部导航栏样式 替换的订单页
  11. setTabBarItem(1, '订单', 'static/tab-order.png','static/tab-order-current.png')
  12. } else {
  13. this.setFoundShowContentFlag(true)
  14. // 设置底部导航栏样式 原发现页样式
  15. setTabBarItem(1, '发现', 'static/tab-cate.png','static/tab-cate-current.png')
  16. }
  17. }
  18. })
  19. } else {
  20. this.setFoundShowContentFlag(false) //发现页开关
  21. // 设置底部导航栏样式 原发现页样式
  22. setTabBarItem(1, '发现', 'static/tab-cate.png', 'static/tab-cate-current.png')
  23. }
  24. // 设置底部导航栏样式 官方提供的方法
  25. // index/索引 text/修改文本 iconPath/默认图标路径 selectedIconPath/选中图标路径
  26. let setTabBarItem = (index, text, iconPath, selectedIconPath) => {
  27. uni.setTabBarItem({
  28. index,
  29. text,
  30. iconPath,
  31. selectedIconPath
  32. })
  33. }

最后看下实现效果:

1.开关打开时:

 2.开关关闭时

谢谢观看,一定要点赞收藏哦~

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

闽ICP备14008679号