Vue自定义指令实现按钮级的权限控制

这篇具有很好参考价值的文章主要介绍了Vue自定义指令实现按钮级的权限控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:原文参考链接*且听风吟


一、自定义指令—钩子函数

提示:钩子函数:

自定义指令有五个生命周期(也叫钩子函数),分别是:bind,inserted,update,componentUpdated,unbind

  • bind:只调用一次,指令第一次绑定到元素时调用。用这个钩子函数可以定义一个绑定时执行一次的初始化设置。( bind 时父节点为null,因为 bind 是在 dom 树绘制前调用)

  • inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中,在 dom 树绘制后调用)。

  • update:被绑定于元素所在的模板 vNode 更新时调用,但是可能发生在其子 vNode
    更新之前。指令的值可能发生了改变,也可能没有。可以通过比较更新前后的绑定值,来忽略不必要的模板更新。

  • componentUpdated:被绑定元素所在组件的 VNode 及其子 VNode 全部更新后调用。

  • unbind:只调用一次,指令与元素解绑时调用。


提示:以下是本篇文章正文内容,下面案例可供参考

二、钩子函数参数?

钩子函数参数说明,自定义指令中传递的常用参数:

  1. el: 指令所绑定的元素,可以用来直接操作 DOM。
  2. binding: 一个对象,包含指令的很多信息。如下:
  • name:指令名,不包括 v- 前缀。

  • value:指令的绑定值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。

  • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。

  • expression:字符串形式的指令表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。

  • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 “foo”。

  • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。

  • vnode:Vue编译生成的虚拟节点。

  • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

    除了 el 之外,其它参数都应该是只读的。


三、全局自定义指令

实现原理

在 el-button 按钮上设置标签数值,利用 vue的指令功能获取按钮实例对象和按钮上绑定的标签数值,与从接口拿到的按钮权限数据进行匹配,如果匹配成功,证明用户拥有该按钮的使用权限,如果发现没有使用权限,则在指令处理函数中编写代码移除该按钮,界面上就看不到该按钮了。

封装组件

在 src 目录下新建 directive 目录,在目录下新建 permission.js 文件:

代码如下:

import Vue from 'vue';
// 检测是否有权限
// 使用Vue.directive声明自定义指令btn-key
export const permissions = Vue.directive('permission',{
    /**
     * inserted:被绑定元素插入父节点时调用 
     * el:指令所绑定的元素,可以用来直接操作 DOM
     * binding.value:指令的绑定值,例如:v-directive="10" 中,绑定值为 10。
     */
    inserted(el,binding){
        let buttonKey = binding.value;
        // 代表某个元素需要通过权限验证
        if(buttonKey){
            let key = checkKey(buttonKey)
            if(!key){//没有权限
                el.remove()  //删除按钮
            }
        }else{
            throw new Error('缺少唯一指令')
        }
    },
}) 
 
// 检测传入的元素key是否可以显示
function checkKey(key) {
    // 获取权限数组
    let permissionData = sessionStorage.getItem("permissionData") ? sessionStorage.getItem("permissionData") : [] ;
    //如果传入的元素key不在权限数组里,则不可显示
    let index = permissionData.indexOf(key)
    if(index > -1) {
        return true;
    }else{
        return false;
    }
}
 

引入组件

在入口文件 src\main.js 里面引入自定义指令:

import permission './directive/permission'
Vue.use(permission)

使用组件

在使用的页面,按钮中只需引用v-operate指令,赋值判断即可:文章来源地址https://www.toymoban.com/news/detail-499607.html

<el-button @click='delHandle' type="primary" v-permission="'delete'">删除</el-button>

到了这里,关于Vue自定义指令实现按钮级的权限控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • vue权限按钮的实现

    由于下面几种方式都需要用到鉴权函数,所以将其放置在组件外面,供组件或其他文件调用。 将可以操作按钮的权限码们以权限码数组的形式存放到了pinia中,所以要先获取pinia中的权限数组再进行判断。 情况一:没有传值,则无法做权限码的比对,所以可以认为不需要鉴权

    2024年02月15日
    浏览(38)
  • 【vue】按钮权限的实现

    普通按钮或者组件按钮,都可。 判断用户是否拥有新增、编辑、删除、查询等功能的按钮权限。 先获取权限集合,存储到vxe中------一般都是在接口里面获取 创建js页面,封装函数 创建子组件页面,封装button组件 再到所需的父组件页面引用子组件页面 举个例子:在首页中拿

    2024年02月10日
    浏览(37)
  • vue自定义指令添加跟随鼠标光标提示框v-tooltip

    在vue中添加自定义指令,能够识别dom,通过鼠标hover事件移入当前区域后,显示浮层 directives自定义提示指令 通过监听鼠标移入移出的mouse方法,设置浮层样式与出现时机 2、div显示dom标签v-tooltip 此时运行后,出现浮层

    2024年02月11日
    浏览(55)
  • 基于SpringAOP实现自定义接口权限控制

    目前大部分接口鉴权方案,一般都是采用 【用户-角色-权限】模型。 将接口与权限进行编码死绑定,同时角色与权限进行动态绑定,用户与角色也进行动态绑定。 创建用户之后,用户可以分配多个角色。 创建角色之后,通过查询代码内置的权限树,进行角色与权限绑定,存

    2024年02月05日
    浏览(33)
  • 记录--按钮级别权限怎么控制

    最近的面试中有一个面试官问我按钮级别的权限怎么控制,我说直接 v-if 啊,他说不够好,我说我们项目中按钮级别的权限控制情况不多,所以 v-if 就够了,他说不够通用,最后他对我的评价是做过很多东西,但是都不够深入,好吧,那今天我们就来深入深入。 因为我自己没

    2024年02月06日
    浏览(36)
  • 页面/按钮 - 权限控制(前端)

    什么是权限控制 在项目中,尤其是在后台管理系统中,不同人员登陆,看到的页面菜单是不一样的,比如,一个公司的办公系统,老板登陆可以看到所有的页面,而普通员工登录可能无法看到公司业绩,营收情况的页面,比如公司的员工个人资料页面只有人力资源部门有权利

    2024年02月13日
    浏览(34)
  • vue3自定义按钮点击变颜色实现(多选功能)

    实现效果图: 默认选中第一个按钮,未选中按钮为粉色,点击时颜色变为红色 利用动态类名,当定义isChange数值和下标index相同时,赋予act类名,实现变色效果

    2024年01月19日
    浏览(42)
  • vue前端实现图片下载,实现点击按钮弹出本地窗口,选择自定义保存路径

    直接上代码,废话不多说,点关注,不迷路 一、下载代码 二、别找代码了,不用代码就可以实现 以下按照步骤一步一步来 按照红色箭头所指,用鼠标戳它 恭喜你,功能完成了

    2024年02月13日
    浏览(59)
  • 【VUE学习】权限管理系统前端vue实现4-自定义icon实现

    template 部分:定义了组件的模板内容。在这里,使用了 svg 标签来创建一个 SVG 图标元素,并添加了一个 use 元素来引用具体的图标。 :xlink:href 属性使用了绑定语法,将 iconName 绑定为 use 元素的 xlink:href 属性的值。 script setup 部分:使用了 Vue 3 的 script setup 语法,用于编写组件

    2024年02月13日
    浏览(44)
  • VUE3实现拖拽功能自定义指令

    1.首先创建一个js文件,命名为drag.js    注意看注释部分,对操作DOM块进行了不同需求的支持     可以只在移动头部时操作整个DOM,或者是否允许DOM元素移出屏幕都能实现 2.在main.js中引入drag.js 3.在你想使用的标签中添加 v-drag 即可实现拖动了  

    2024年02月14日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包