位置: 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视频教程)

  • 小规模纳税人的企业所得税税率
  • 个税申报系统累计收入怎么算
  • 土地使用权分割转让依据
  • 清理往来账管理办法
  • 抵债资产涉税问题
  • 收到承兑如何贴现
  • 减免税款的会计处理
  • 差旅费企业所得税扣除
  • 福利费发票可以开个人抬头吗
  • 一般账户网银可以发工资吗
  • 制造业交新型墙体材料专项基金款分录
  • 堤围内的土地性质
  • 小规模增值税普通发票税率
  • 个体工商户开票金额超过核定了咋办
  • 小规模怎样计算进项税额
  • 一般纳税人的增值税应纳税额等于
  • 公司业务招待费占比
  • 小规模纳税人专票如何申报
  • 研发阶段计入管理费用吗吗
  • 已申报未导入什么意思呀
  • 资产损失税前扣除
  • 带销货清单的专票咋红冲
  • 进厂的政府补贴怎么拿
  • 材料验收入库会计分录怎么写计划成本法
  • 会计制度备案成本核算方法一般选择哪个
  • 鸿蒙系统最新版本
  • 财务预算业务制度有哪些
  • 几个人注册公司好还是个体户好
  • php写入xml
  • 员工安置费标准出台
  • 固定资产清理的借贷方向表示什么
  • 其他业务收入与营业外收入
  • 无效借款合同自被确认为无效之日起无效
  • 公司注销时做哪些财务处理
  • 何为前端后端
  • sklearn报错
  • yolo系列算法比较
  • 苹果cmsjsui
  • 日常公用经费包括资本性支出吗
  • 电子发票开出后如何查看
  • 登记银行存款日记账的凭证有哪些
  • Python怎么转化为中文
  • 企业间借款利息开票税收分类编码
  • 建筑业增值税预缴管理办法
  • mysql中desc什么意思
  • 企业财务部门对业务部门的监管要求
  • 培训费属于什么
  • mysql存储引擎有哪些区别
  • sql2012附加数据库方法
  • 两者的性质有所差异
  • 抄税是什么时间截止
  • 购买服务费用
  • 其他单位无偿过账合法吗
  • 房产税减按70%的政策
  • 免费品尝活动广告语
  • 哪种飞机票可以抵扣进项税
  • 研发支出的帐务处理
  • mysql有外键数据输入
  • OBJECTPROPERTY与sp_rename更改对象名称的介绍
  • xtrabackup备份原理
  • win8.1纯净版下载
  • onenote for windows 10怎么用
  • linux中samba服务器的设计方案
  • 轻松备份怎么用
  • 微软每月补丁更新一般于什么时间发布
  • windows7怎么卸载
  • window10的微软商店在哪
  • win7如何重装系统电脑
  • cocos2dx schedule
  • javascript零基础
  • 简单的小创意
  • Node.js中的全局对象有
  • unity 内存管理
  • js的设计模式有哪些
  • 如何使用jquery实现点击按钮弹出一个对话框
  • js制作网页制作步骤
  • 国家税务局发票查验平台查验官网
  • 容积率大于0.5 房产原值怎样算
  • 广东省哪里地方考中控证好
  • 房没交契税和物业维修金房屋预告登记证明可以打印吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设