赞
踩
点关注,不迷路!先点赞,后观看,养成阅读好习惯!你长得这么好看,点个赞不过分吧~
在开发项目时,无论是PC端的项目还是移动端的项目,经常会遇到根据用户的权限显示不同的功能模块,例如,超级管理员可以查看所有功能与模块,而普通用户只能看到部分模块。
那么在uniapp中如何根据权限实现动态的切换底部菜单呢?就类似于下面这样:
普通用户看到的界面
超级管理员看到的界面
废话不多说,让我们直接开始吧!
这点官方已经说得非常清楚了,建议大家采用npm的安装方式。这里挂个链接 – uView的安装和配置
在pages里面创建页面,在pages.json文件中注册。如图:
需要注意的是,这里仅需配置tabBar中list属性中各页面的路径pagePath属性,如下图所示:
需要注意的是pagePath的最前面不要加 /
其实就是按照uview官方文档tabbar组件绑定的参数进行配置,这里是说明
{
// 非凸起按钮未激活的图标,可以是uView内置图标名或自定义扩展图标库的图标
// 或者png图标的【绝对路径】,建议尺寸为80px * 80px
// 如果是中间凸起的按钮,只能使用图片,且建议为120px * 120px的png图片
iconPath: "home",
// 激活(选中)的图标,同上
selectedIconPath: "home-fill",
// 显示的提示文字
text: '首页',
// 红色角标显示的数字,如果需要移除角标,配置此参数为0即可
count: 2,
// 如果配置此值为true,那么角标将会以红点的形式显示
isDot: true,
// 如果使用自定义扩展的图标库字体,需配置此值为true
// 自定义字体图标库教程:https://www.uviewui.com/guide/customIcon.html
customIcon: false,
// 如果是凸起按钮项,需配置此值为true
midButton: false,
// 点击某一个item时,跳转的路径,此路径必须是pagees.json中tabBar字段中定义的路径
pagePath: '', // 1.5.6新增,路径需要以"/"开头
}
配置的文件 tabbar.js。需要注意的是pagePath的最前面要加 /
const userTabbar = [
{
"pagePath": "/pages/home/home",
"text": "主页"
},
{
"pagePath": "/pages/profile/profile",
"text": "个人中心"
}
]
const adminTabbar = [
{
"pagePath": "/pages/home/home",
"text": "主页"
},
{
"pagePath": "/pages/message/message",
"text": "信息"
},
{
"pagePath": "/pages/profile/profile",
"text": "个人中心",
}
]
export { userTabbar, adminTabbar }
index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
dynamicTabbar: [] // 动态tabbar
},
getters: {
},
actions: {
changeTabbar({commit}, payload) {
commit('updateTabbar', payload)
}
},
mutations: {
updateTabbar(state, payload) {
state.dynamicTabbar = payload
}
}
})
export default store
login.vue
<template>
<view>
<button type="primary" @click="loginClick">登录</button>
</view>
</template>
<script>
import { userTabbar, adminTabbar } from '../../utils/tabbar.js'
export default {
data() {
return {
userRoleId: 1, // 假设0是超级管理员,1是普通用户
}
},
onLoad() {
},
methods: {
loginClick() {
if(this.userRoleId === 0)
this.$store.dispatch('changeTabbar', adminTabbar)
else
this.$store.dispatch('changeTabbar', userTabbar)
uni.switchTab({
url: '/pages/home/home'
})
}
}
}
</script>
结果就和概述里面的一样了
说好了手拉手吗,为了实现小白也能看懂,这里将主要的源代码也贴上,上面写过的就不再写了。
home.vue
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view class="text-area">
<text class="title">{{title}}</text>
</view>
<u-tabbar
:list="tabBarList"
:active-color="activeColor"
:inactive-color="inactiveColor"
:border-top="borderTop" />
</view>
</template>
<script>
export default {
data() {
return {
title: '主页',
tabBarList: this.$store.state.dynamicTabbar,
borderTop: true,
inactiveColor: '#909399',
activeColor: '#5098FF'
}
},
onLoad() {
},
methods: {
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin-top: 200rpx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50rpx;
}
.text-area {
display: flex;
justify-content: center;
}
.title {
font-size: 36rpx;
color: #8f8f94;
}
</style>
pages.json
{
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path" : "pages/login/login",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path": "pages/home/home",
"style": {
"navigationBarTitleText": "主页",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}
,{
"path" : "pages/message/message",
"style" :
{
"navigationBarTitleText": "信息",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}
,{
"path" : "pages/profile/profile",
"style" :
{
"navigationBarTitleText": "个人中心",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}
],
"tabBar": {
"color": "#1e1e1e",
"selectedColor": "#11bb60",
"fontSize": "16px",
"borderStyle": "black",
"backgroundColor": "#fefefe",
"list": [
{
"pagePath": "pages/home/home"
// "text": "主页"
},
{
"pagePath": "pages/message/message"
// "text": "信息"
},
{
"pagePath": "pages/profile/profile"
// "text": "个人中心"
}
]
},
"easycom": {
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}
项目目录组织
本文我们一同掌握了在uniapp中如何借助uView实现动态tabbar。需要注意的是
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。