位置: IT常识 - 正文

vue3全局自定义指令实现按钮权限控制(vue3全局属性)

编辑:rootadmin
vue3全局自定义指令实现按钮权限控制 1. 文档介绍的全局自定义指令

推荐整理分享vue3全局自定义指令实现按钮权限控制(vue3全局属性),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue自定义全局方法,vue3全局自定义指令自动获取input焦点,vue自定义全局方法,vue3定义全局变量,vue3定义全局变量,vue3全局自定义指令模块化,vue3全局自定义指令,vue3全局自定义指令,内容如对您有帮助,希望把文章链接给更多的朋友!

在Vue的模板语法中我们除了使用:v-show、v-for、v-model等,Vue其实 也允许我们来自定义自己的指令。

1)注意,在 Vue 中,代码复用和抽象的主要形式是组件。 2)然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

先看一下vue3官方文档介绍使用的自定义全局指令:

自定义全局指令:app的 directive 方法,可以在任意组件中被使用;

vue3全局自定义指令实现按钮权限控制(vue3全局属性)

main.ts

其他页面使用v-focus这个指令

2. 参数解释el:指令所绑定的元素,可以直接操作DOM。binding:是一个对象,包含该指令的所有信息。binding.value,传递给指令的值,例如:<div v-permission="['add']",传递给permission指令的值就是['add'],我们可以拿到值做相关处理。3. 适用业务场景

在很多后台管理系统中,常常需要针对某个页面的按钮进行权限控制。比如说,角色A用户拥有该页面的新增,编辑,删除权限;角色B用户拥有该页面编辑权限。那么对于角色B用户来说,该页面新增,删除按钮应该是不可见的。这就需要我们自定义指令来控制按钮的显示和隐藏。

4. 实现步骤

1) 用户登录成功时,将用户权限数据,存入sessionStorage中

// login.vue<script setup lang='ts'> import { useStore } from '@/store' const store = useStore() const login = ()=>{ // 请求后台接口,拿到相关的用户权限数据 getUserPermissionApi().then(res=>{ sessionStorage.setItem('permission',res.data) // 示例: // 页面名称:按钮权限名 // ['auto.add','auto.delete','auto.update'] }).catch(err=>{ console.log('拿到用户权限内容报错了') }) }</script>

2) 进行封装,项目根目录下新建一个directives文件夹 =》permission.ts和index.ts

// permission.ts// 引入vue中定义的指令对应的类型定义import { Directive } from 'vue'export const permission: Directive = { // mounted是指令的一个生命周期 mounted(el, binding) { // value 获取用户使用自定义指令绑定的内容 const { value } = binding // 获取用户所有的权限按钮 const permissionBtn = sessionStorage.getItem('permission') // 判断用户使用自定义指令,是否使用正确了 if (value && value instanceof Array && value.length > 0) { const permissionFunc = value //判断传递进来的按钮权限,用户是否拥有 //Array.some(), 数组中有一个结果是true返回true,剩下的元素不会再检测 const hasPermission = permissionBtn.some((role: any) => { return permissionFunc.includes(role) }) // 当用户没有这个按钮权限时,设置隐藏这个按钮 if (!hasPermission) { el.style.display = 'none' } } else { throw new Error('need roles! Like v-permission="[\'admin\',\'editor\']"') } }}// 注意,我们这里写的自定义指令,传递内容是一个数组,也就说,按钮权限可能是由// 多个因素决定的,如果你的业务场景只由一个因素决定,自定义指令也可以不传递一个数组,// 只传递一个字符串就可以了// index.tsexport * from './permission'

3)main.ts中注册为全局指令

import App from './App.vue'import { createApp, Directive } from 'vue'import * as directives from '@/directives'const app = createApp(App)console.log(directives, 'directives') //打印发现是导出的自定义指令名,permissionObject.keys(directives).forEach(key => { //Object.keys() 返回一个数组,值是所有可遍历属性的key名 app.directive(key, (directives as { [key: string ]: Directive })[key]) //key是自定义指令名字;后面应该是自定义指令的值,值类型是string})

4) 在页面中使用

<template> <button v-permission="['auto.add']">新增</button> <button v-permission="['auto.update']">编辑</button> <button v-permission="['auto.delete']">删除</button></template>

这样,我们的全局自定义指令基本就实现按钮权限的控制了。

本文链接地址:https://www.jiuchutong.com/zhishi/289711.html 转载请保留说明!

上一篇:Linux系统驱动跟裸机驱动的区别(linux驱动和windows驱动)

下一篇:Maven基础学习——tomcat插件配置(含web工程配置)(maven视频教程)

  • 华为nova4怎么连拍(华为nova4怎么连接蓝牙耳机)

    华为nova4怎么连拍(华为nova4怎么连接蓝牙耳机)

  • 如何通过微信定位其他人(如何通过微信定位一个人的位置免费软件)

    如何通过微信定位其他人(如何通过微信定位一个人的位置免费软件)

  • 抖音反馈与帮助怎么不回复(抖音反馈与帮助内容怎么删除)

    抖音反馈与帮助怎么不回复(抖音反馈与帮助内容怎么删除)

  • 乐视是什么(乐视是什么情况)

    乐视是什么(乐视是什么情况)

  • 网上买的手机怎么保修(网上买的手机怎么退货)

    网上买的手机怎么保修(网上买的手机怎么退货)

  • 手机wps可以删除页眉吗(手机wps可以删除页面吗)

    手机wps可以删除页眉吗(手机wps可以删除页面吗)

  • 苹果手机改不了微信号吗(苹果手机改不了密码怎么办)

    苹果手机改不了微信号吗(苹果手机改不了密码怎么办)

  • 收进群助手且不提醒是什么意思(收进群助手且不提醒消耗流量吗)

    收进群助手且不提醒是什么意思(收进群助手且不提醒消耗流量吗)

  • 华为荣耀30pro耳机怎么用(华为荣耀30pro耳机孔在哪里)

    华为荣耀30pro耳机怎么用(华为荣耀30pro耳机孔在哪里)

  • 华为微信视频模糊不清怎么办(华为微信视频模糊怎么回事)

    华为微信视频模糊不清怎么办(华为微信视频模糊怎么回事)

  • 以太网可以上网吗(以太网可以上网的路由器)

    以太网可以上网吗(以太网可以上网的路由器)

  • 运算器控制器和寄存器属于什么(运算器控制器和内存储器合称为主机)

    运算器控制器和寄存器属于什么(运算器控制器和内存储器合称为主机)

  • 微信删了重新下载聊天记录怎么恢复(微信删了重新下载还有原来的记录吗)

    微信删了重新下载聊天记录怎么恢复(微信删了重新下载还有原来的记录吗)

  • 电源带不起显卡的特征(电源带不起显卡会出现什么情况)

    电源带不起显卡的特征(电源带不起显卡会出现什么情况)

  • 微信收藏的视频删除了怎么恢复(微信收藏的视频怎么保存到手机相册里)

    微信收藏的视频删除了怎么恢复(微信收藏的视频怎么保存到手机相册里)

  • 抖音的本场音浪是什么计算的(抖音的本场音浪是什么意思)

    抖音的本场音浪是什么计算的(抖音的本场音浪是什么意思)

  • 如何设置首行缩进2字符(如何设置首行缩进0.8厘米)

    如何设置首行缩进2字符(如何设置首行缩进0.8厘米)

  • mq9f2ll/a是苹果什么版(苹果mq9d2是什么版本)

    mq9f2ll/a是苹果什么版(苹果mq9d2是什么版本)

  • vivoz5x反向充电需要线吗(vivoz5x反向充电怎么用)

    vivoz5x反向充电需要线吗(vivoz5x反向充电怎么用)

  • 腾讯视频版权限制不能投屏怎么办(腾讯视频版权限制无法下载怎么解决)

    腾讯视频版权限制不能投屏怎么办(腾讯视频版权限制无法下载怎么解决)

  • 手机qq发送消息失败怎么回事(手机qq发送消息怎么不显示对方未读或已读)

    手机qq发送消息失败怎么回事(手机qq发送消息怎么不显示对方未读或已读)

  • 发财树叶子发黄怎么办(发财树叶子发黄怎样补救)

    发财树叶子发黄怎么办(发财树叶子发黄怎样补救)

  • 印花税申报表计税依据怎么填
  • 一般纳税人公账转法人私账
  • 资金预算表编制依据
  • 计提税费的会计分录怎么写
  • 孳息和利息的区别
  • 分公司小规模
  • 研发费用利润表中
  • 事业支出中的其他支出
  • 房地产项目结转条件
  • 营改增医院增值税
  • 工程公司收入成本入账
  • 发给职工的福利要交个税吗
  • 申报财产租赁合同印花税是在什么情况下?
  • 车间管理人员工资总额占车间工资总额的10%
  • 显示器件属于什么设备
  • 退回所得税怎么处理
  • 季度不超9万
  • 年终奖个税公式表最新
  • 2020年最新增值税租车费
  • 已抵扣发票丢失如何处理
  • 往期从价房产税未申报怎么处理
  • 出售废旧物资可以开专票吗
  • 个人捐赠住房
  • 操作系统不同
  • 住房公积金如何使用
  • 欠税,偷税后果严重吗
  • 电脑上加速网页的加速器
  • 苹果mac怎么删除照片
  • linux做raid命令
  • 收到违约金赔款计入什么科目
  • 股东向公司借款合法吗
  • 安徽4岁男孩户口已解决
  • 新罕布什尔州的邮政编码
  • 税法工资薪金总额
  • 确保政府采购
  • 记账凭证和原始凭证都是登记账簿的直接依据
  • php中的函数
  • php while true
  • axios和ajax的关系
  • ChatGPT可以做什么
  • groupinfo命令
  • 增值税直接减免税额要交企业所得税吗
  • hive.
  • 现金股利什么时候到账
  • 品牌代理费计入什么费用
  • 什么叫现金流量表举例说明
  • 哪些情况可以开立基本账户
  • sql server 数据库技术
  • 先给发票后付款做账
  • 工程施工企业收入1750万,利润怎么算
  • 税控盘有什么作用
  • 预缴增值税需要提供什么资料
  • 上期计提的费用怎么入账
  • 资产减值损失为正数代表什么意思
  • 建筑施工企业检查的内容包括什么
  • 简易计税方法适用什么服务
  • 如何理解会计的本质
  • 营业外支出的具体内容
  • 给个人的销售返现合法吗
  • 根据《增值税暂行条例》的规定,适用9
  • 增值税普通发票查询
  • 农产品没有发票怎么办
  • 总账建账要遵循的原则
  • qq8.2.1版本下载正式版
  • win8错误代码0xc0000001开不了机
  • win平板装ubuntu
  • win8系统升级
  • kb3150220安装失败
  • cocos2dx3.4 Menu
  • vs opengl配置
  • js兼容ie
  • shell 正则表达式 *什么意思
  • linux中使用最多的命令
  • javascript中array数组对象的含义及常用方法
  • 详解HTTPS 的原理和 NodeJS 的实现
  • 举例讲解生产可能性曲线
  • js图片轮播和点击切换
  • 动物大联盟是国内品牌吗
  • 重庆电子税务局app下载
  • 溧水到南京南地铁大站快车时刻表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设