uni-app使用uview-ui实现动态更改底部tabbar

这篇具有很好参考价值的文章主要介绍了uni-app使用uview-ui实现动态更改底部tabbar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:根据不同的权限(用户 0, 物业 1)展示不同的tabbar
这里使用的是uview-ui@1.8.4 tabbar文章来源地址https://www.toymoban.com/news/detail-525966.html

    1. 在utils文件夹下新建一个tabbar.js文件,来存储不同权限下的底部导航数据
// 用户tabbar
let tabUser = [
	{
		"pagePath": "/pages/index/index",
		"text": "首页",
		"iconPath": "/static/icon_bx.png",
		"selectedIconPath": "/static/icon_bx_hover.png"
	},
	{
		"pagePath": "/pages/index1/index",
		"text": "咨询",
		"iconPath": "/static/icon_adress.png",
		"selectedIconPath": "/static/icon_adress_hover.png"
	},
	{
		"pagePath": "/pages/index2/index",
		"text": "我的",
		"iconPath": "/static/icon_user.png",
		"selectedIconPath": "/static/icon_user_hover.png"
	}
]
// 物业tabbar
let tabPro = [
	{
		"pagePath": "/pages/index/index",
		"text": "首页",
		"iconPath": "/static/logo.png",
		"selectedIconPath": "/static/logo.png"
	},
	{
		"pagePath": "/pages/index1/index",
		"text": "咨询",
		"iconPath": "/static/logo.png",
		"selectedIconPath": "/static/logo.png"
	},
	{
		"pagePath": "/pages/index3/index",
		"text": "管理",
		"iconPath": "/static/logo.png",
		"selectedIconPath": "/static/logo.png"
	},
	{
		"pagePath": "/pages/index2/index",
		"text": "我的",
		"iconPath": "/static/logo.png",
		"selectedIconPath": "/static/logo.png"
	}
]
export default [
	tabUser,
    tabPro]
    1. 在page.json文件里,把tabbar里的几个页面去重放进去tabBar。
"tabBar": {
    "color": "#000",
    "selectedColor": "#567856",
    "backgroundColor": "#FFFFFF",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text":""
      },
      {
        "pagePath": "pages/index1/index",
        "text":""
      },
      {
        "pagePath": "pages/index2/index",
        "text":""
      },
      {
        "pagePath": "pages/index3/index",
        "text":""
      }
    ]
  }
    1. 使用vuex 新建store 文件夹存储相关数据
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import tabBar from '@/utils/tabbar.js'
const store = new Vuex.Store({
	state: {
		tabBarList: [],
		roleId: 0, //0 用户,1 物业
	},
	mutations: {
		// 设置角色ID
		setRoleId(state, data) {
			state.roleId = data;
			uni.setStorageSync('roleId',data)
			state.tabBarList = tabBar[data];
			uni.setStorageSync('tabBarList',tabBar[data])
		},
	},
})
export default store
    1. 在入口文件 main.js 中使用
import Vue from 'vue'
import App from './App'
import uView from "uview-ui";
import store from './store/index'

Vue.use(uView);

Vue.config.productionTip = false
Vue.prototype.$store = store
App.mpType = 'app'

const app = new Vue({
    store,
    ...App
})
app.$mount()
    1. 在components中新建tabBar.vue 组件
<template>
  <view>
    <u-tabbar
      :list="tabBarList"
      @change="change"
      v-model="current"
      :active-color="activeColor"
      :inactive-color="inactiveColor"
      :height="110"
      :border-top="borderTop"
    >
    </u-tabbar>
  </view>
</template>
<script>
export default {
  props: {
    tabBarList: {
      type: Array,
      default: () => uni.getStorageSync("tabBarList"),
    },
  },
  data() {
    return {
      borderTop: true,
      inactiveColor: "#000",
      activeColor: "#987435",
      current: 0,
    };
  },
  methods: {
    change(e) {
      const tabbar = uni.getStorageSync("tabBarList");
      console.log(tabbar);

      switch (e) {
        case 0:
          uni.switchTab({
            url: tabbar[0].pagePath,
          });
          break;
        case 1:
          uni.switchTab({
            url: tabbar[1].pagePath,
          });
          break;
        case 2:
          uni.switchTab({
            url: tabbar[2].pagePath,
          });
          break;
        case 3:
          uni.switchTab({
            url: tabbar[3].pagePath,
          });
          break;
        default:
          uni.switchTab({
            url: tabbar[0].pagePath,
          });
          break;
      }
    },
  },
};
</script>
    1. 登录时,获取后端返回的权限这里没有接口就写死啦,然后再调用store里的setRole方法
<template>
  <view class="content">
    <u-button type="primary" text="登录" @click="login"></u-button>
  </view>
</template>

<script>
import { mapMutations } from "vuex";
export default {
  data() {
    return {
      roleId: 1,
    };
  },
  methods: {
    ...mapMutations(["setRoleId"]),
    login() {
      this.setRoleId(this.roleId); // 0或者1
      uni.switchTab({
        url: "../index/index", // 跳转到首页
      });
    },
  },
};
</script>
    1. tabbar页面使用组件
<template>
    <div>
      <tabBar />
    </div>
  </template>
  
  <script>
  import tabBar from '../../components/tabBar.vue';
  export default {
    components: {
      tabBar
    },
    data() {
      return {
        
      }
    }
  }
  
  </script>
  
  <style>
  
  </style>

到了这里,关于uni-app使用uview-ui实现动态更改底部tabbar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uView 在 uni-app 中的使用

    提示:正文内容: uView 官网: https://www.uviewui.com uView 是 uni-app 生态专用的 UI 框架 关于uView的取名来由,首字母u来自于uni-app首字母,uni-app是基于Vue.js,Vue和View(延伸为UI、视图之意)同音,同时view组件是uni-app中 最基础,最重要的组件,故取名uView,表达源于uni-app和Vue之意,

    2024年02月15日
    浏览(53)
  • uni-app+uView实现点击查看大图片的效果

    参数说明

    2024年02月10日
    浏览(50)
  • 使用uni-app+uview创建小程序工程并支持请求后端接口

    一、使用工具:     1.hubilderx   下载地址:HBuilderX-高效极客技巧     2.微信开发者工具   下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档     3.uview组件库API:Color 色彩 | uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架 二、使用hubuilderx创建uni-app项目

    2024年02月11日
    浏览(62)
  • uni-app使用uView打开弹出层后输入框聚焦时placeholder错位问题

    这里就不放效果了,大概意思就是在使用uView的popus时,在底部弹出后,如果弹窗中的输入框会造成一瞬间的placeholder文字错位,这个问题的主要是因为uView安全区适配导致 uView相关文档 popus源码 它会自动判断在并且在IPhone X等机型的时候,给元素加上一个适当底部内边距,从

    2024年02月19日
    浏览(49)
  • uview-ui工具函数的使用

    工具函数的使用 1. 函数防抖、节流 2. 对象转url参数 3. 路由封装 4. 时间格式化 5. 求两个颜色渐变之间的值 6. 生成全局唯一guid字符串 7. 获取主题相关颜色 8. 根据type获取图标名称 9. 打乱数组的顺序 10. 对象和数组的深度克隆 11. 对象和数组的深度拷贝 12. 添加单位 13. 规则检验

    2024年02月01日
    浏览(92)
  • uView-ui框架测试使用笔记

    在分析一个项目的时候,发现项目中使用了一个组件,在 components 中没有找这个组件的注册位置,发现这是 uview-ui 中的组件 很明显,这里的 u-notice-bar 是一个组件,但是在 components 中并没有注册的语句,猜测是不是全局引入,或者是 easycom 模式自动引入了,按照 easycom 模式可以自动引入

    2024年02月07日
    浏览(42)
  • uni-app 中使用uview生成测试小程序后报错:pleaseSetTranspileDependencies is not defined

    这是一篇踩坑文,记录一个uni-app中的坑点。 在uni-app 中使用uview后在生成小程序后第一次编译时控制台报了这么一个错: 在检查了许久的原因后最后找到的解决办法是: 在文件 /common/vendor.js 中搜索并删除下面这句话 如上图。 删除掉之后重新编译一下项目就正常运行了。

    2024年02月12日
    浏览(72)
  • 【Uni-App】用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动&确认&回显

    组件的引入就不多赘述了 直接看使用方法 地址我是引入的json文件数据结构大概是这个样子 例1 例2 做个动态style,控制是否高亮地址 链接:https://pan.baidu.com/s/1_heSAGHJnTe-343fRmbOPA 提取码:hmky 如果失效了 ,可以联系我获取

    2024年02月14日
    浏览(49)
  • 使用uview-ui遇见SassError: Undefined variable

    1.确保安装了 scss/sass 编译插件 2.在根目录下  uni.scss  文件中引入  theme.scss 3. 确保在根目录下 App.vue 文件中添加 lang=\\\"scss\\\" 和 index.scss 若依旧报错:    查看项目目录——》  再把 路径 修改为对应文件夹下——》 @import \\\"uview-ui/theme.scss\\\"; @import \\\"uni_modules/uview-ui/theme.scss\\\";    

    2024年02月16日
    浏览(43)
  • 【uni-app项目如何引入 uView组件库】

    uView官方文档 第一步: 在公司创建完成uniapp项目后引入uView 第二步: 您如果是使用HBuilder X创建的uniapp项目,使用uView组件库的话需要在HBuilder X下载插件库 下载 uni_modules ,(如果这个看不懂可以看官方文档) (1) HBuilder X插件库中下载 uni_modules 现在是已经将 uView导入到项目中了

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包