当前位置:   article > 正文

uniapp动态设置Tabbar

uniapp动态设置tabbar

一套小程序及app可能会有多个用户角色,多者能看到的内容应该是不一样的。

实现原理
舍弃uniapp原生的tabbar,使用uView插件下的u-tabbar导航插件来实现。
介绍 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI,是 uni-app 生态最优秀的 UI 框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水icon-default.png?t=N7T8https://uviewui.com/components/intro.html根据uView 2.0 安装及配置在uniappApp中配置完善,配置完善后进行动态Tabbar设置

效果图

一、设置pages.json

配置需要跳转的路径,不进行图标及名称配置

  1. "tabBar": {
  2. "list": [{
  3. "pagePath": "pages/home/home"
  4. },
  5. {
  6. "pagePath": "pages/admin/admin"
  7. },
  8. {
  9. "pagePath": "pages/me/me"
  10. }
  11. ]
  12. }
二、新建一个common文件夹,并创建文件tabbar.vue

tabbar.vue

  1. <template>
  2. <view>
  3. <u-tabbar :value="getCurrent()" @change="tabbatChange" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true">
  4. <u-tabbar-item v-for="(item, index) in tabBarList" :key="index" :text="item.text" :badge="item.badge">
  5. <image class="u-page__item__slot-icon" slot="active-icon" :src="item.icon"></image>
  6. <image class="u-page__item__slot-icon" slot="inactive-icon" :src="item.inactive"></image>
  7. </u-tabbar-item>
  8. </u-tabbar>
  9. </view>
  10. </template>
  11. <script>
  12. import global from "@/utils/global.js"
  13. export default {
  14. props: ['current', 'tabBarList'],
  15. data() {
  16. return {
  17. }
  18. },
  19. methods: {
  20. getCurrent(){
  21. return global.tabBarCurrent ? global.tabBarCurrent : this.current;
  22. },
  23. tabbatChange(index) {
  24. global.tabBarCurrent = index
  25. uni.switchTab({
  26. url: this.tabBarList[index].pagePath,
  27. })
  28. }
  29. }
  30. }
  31. </script>
  32. <style lang="scss" scoped>
  33. image {
  34. width: 20px;
  35. height: 20px;
  36. }
  37. </style>

引入的global.js文件中的内容

  1. export default {
  2. timer : null,
  3. tabBarCurrent: 0
  4. }

三、在utils下创建tabbar.js文件并输入配置信息

  1. // 个人用户
  2. const ordinary = [{
  3. icon: '/static/home.png',
  4. inactive: '/static/homeTwo.png',
  5. badge: 0,
  6. text: '首页',
  7. pagePath: "/pages/home/home",
  8. index: '0'
  9. },
  10. {
  11. icon: '/static/me.png',
  12. inactive: '/static/meTwo.png',
  13. badge: 0,
  14. text: '我的',
  15. pagePath: "/pages/me/me",
  16. index: '2'
  17. }
  18. ]
  19. // 企业用户
  20. const member = [{
  21. icon: '/static/home.png',
  22. inactive: '/static/homeTwo.png',
  23. badge: 0,
  24. text: '首页',
  25. pagePath: "/pages/home/home",
  26. index: '0'
  27. },
  28. {
  29. icon: '/static/admin.png',
  30. inactive: '/static/adminTwo.png',
  31. badge: 0,
  32. text: 'admin',
  33. pagePath: "/pages/admin/admin",
  34. index: '1'
  35. },
  36. {
  37. icon: '/static/me.png',
  38. inactive: '/static/meTwo.png',
  39. badge: 0,
  40. text: '我的',
  41. pagePath: "/pages/me/me",
  42. index: '2'
  43. }
  44. ]
  45. export default {
  46. ordinary,
  47. member
  48. }
四、在需要展示tabbar的文件中使用

首页

  1. <template>
  2. <view class="content">
  3. <tab-bar :current='0' :tabBarList="tabBerLists"></tab-bar>
  4. // admin的 current 为1,以此类推
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. tabBerLists: []
  12. }
  13. },
  14. onLoad() {
  15. // 影藏原生的tabbar,有自定义tabbar的页面都要写一遍
  16. uni.hideTabBar()
  17. },
  18. onShow() {
  19. this.tabBerLists = uni.getStorageSync('tabBarList') // 自定义的tabbar赋值
  20. },
  21. methods: {
  22. }
  23. }
  24. </script>
五、配置vuex,创建store文件夹及index.js文件夹
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. import tabBar from '@/utils/tabBar.js' // 引入刚刚创建的tabBar.js
  5. const store = new Vuex.Store({
  6. state: {
  7. tabBarList: [],
  8. },
  9. mutations:{
  10. // 底部tabbar
  11. setRoleId(state,data){
  12. if(data === 1) {
  13. state.tabBarList = tabBar.member
  14. }else {
  15. state.tabBarList = tabBar.ordinary
  16. }
  17. uni.setStorageSync('tabBarList', state.tabBarList) // 根据登录时传过来的值,存储对应的tabbarlist
  18. },
  19. }
  20. })
  21. export default store
六、在登录页使用vuex
  1. <template>
  2. <view class="content">
  3. <button @click="login">登录</button>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. }
  11. },
  12. onLoad() {
  13. },
  14. methods: {
  15. login() {
  16. this.$store.commit('setRoleId', 0)
  17. uni.switchTab({
  18. url: '/pages/home/home'
  19. })
  20. }
  21. }
  22. }
  23. </script>
  24. <style>
  25. </style>
七、在退出登录时,重置global文件中的数据,设置tabBarCurrent 为 0 
  1. <template>
  2. <view>
  3. <button @click="signOut">退出</button>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. }
  11. }
  12. methods: {
  13. signOut() {
  14. this.$global.tabBarCurrent = 0
  15. uni.reLaunch({
  16. url: '/pages/index/index'
  17. })
  18. }
  19. }
  20. }
  21. </script>

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

闽ICP备14008679号