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

 更新时间:2024年05月15日 10:48:00   作者:骆骆爱学习  
在Vue中可以通过自定义指令来实现按钮权限控制,本文主要介绍了Vue自定义指令实现按钮级的权限控制的示例代码,具有一定的参考价值,感兴趣的可以了解一下

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

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

  • bind:只调用一次,指令第一次绑定到元素时调用。用这个钩子函数可以定义一个绑定时执行一次的初始化设置。( bind 时父节点为null,因为 bind 是在 dom 树绘制前调用)
  • inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中,在 dom 树绘制后调用)。
  • update:被绑定于元素所在的模板 vNode 更新时调用,但是可能发生在其子 vNode
  • 更新之前。指令的值可能发生了改变,也可能没有。可以通过比较更新前后的绑定值,来忽略不必要的模板更新。
  • componentUpdated:被绑定元素所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。

二、钩子函数参数?

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

el: 指令所绑定的元素,可以用来直接操作 DOM。

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指令,赋值判断即可:

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

到此这篇关于Vue自定义指令实现按钮级的权限控制的示例代码的文章就介绍到这了,更多相关Vue 按钮权限控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • vue2路由中router-view不显示的原因及踩坑记录

    vue2路由中router-view不显示的原因及踩坑记录

    这篇文章主要介绍了vue2路由中router-view不显示的原因及踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue实现页面内容禁止选中功能,仅输入框和文本域可选

    vue实现页面内容禁止选中功能,仅输入框和文本域可选

    今天小编就为大家分享一篇vue实现页面内容禁止选中功能,仅输入框和文本域可选,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue3+ts+vite中“@“路径失效的解决办法

    vue3+ts+vite中“@“路径失效的解决办法

    这篇文章主要介绍了vue3+ts+vite中“@“路径失效的解决办法,在使用vite脚手架生成项目时,解决引入路径失败的错误,可以按照本文介绍的步骤操作,需要的朋友可以参考下
    2024-11-11
  • vue定时器清除不掉,导致功能频繁执行问题

    vue定时器清除不掉,导致功能频繁执行问题

    这篇文章主要介绍了vue定时器清除不掉,导致功能频繁执行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Vue封装数字框组件实现流程详解

    Vue封装数字框组件实现流程详解

    这篇文章主要介绍了Vue封装数字框组件实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • v-for中动态校验el-form表单项的实践

    v-for中动态校验el-form表单项的实践

    在项目开发中,我们经常会遇到表单保存的功能,本文主要介绍了v-for中动态校验el-form表单项的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-05-05
  • 解决使用vue-awesome-swiper组件手动滚动点击失效问题

    解决使用vue-awesome-swiper组件手动滚动点击失效问题

    这篇文章主要介绍了使用vue-awesome-swiper组件手动滚动点击失效问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 详解vue使用$http服务端收不到参数

    详解vue使用$http服务端收不到参数

    这篇文章主要介绍了vue使用$http服务端收不到参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue更新数据却不渲染页面的解决

    vue更新数据却不渲染页面的解决

    这篇文章主要介绍了vue更新数据却不渲染页面的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue和React中diff算法的区别及说明

    Vue和React中diff算法的区别及说明

    React和Vue都使用虚拟DOM和diff算法来更新DOM,但它们在实现上有所不同,React采用基于索引的比较,Vue采用双端比较算法,React在比较时不复用不同类型的节点,而Vue会优先复用两端相同的节点,React对key的依赖较高,而Vue在没有key时也能通过双端比较优化
    2025-03-03

最新评论