当前位置: 首页 > news >正文

Vue.directive自定义v-指令

翻阅文章有感,记录学习

vue前端菜单权限控制_vue权限管理菜单思路-CSDN博客

一、定义:Vue.directive是Vue框架中给开发者用于注册自定义指令和返回已注册指令的API

二、基本语法:

// 注册
Vue.directive('my-directive', {bind: function () {},inserted: function () {},update: function () {},componentUpdated: function () {},unbind: function () {}
})// 注册 (指令函数)
Vue.directive('my-directive', function () {// 这里将会被 `bind` 和 `update` 调用
})// getter,返回已注册的指令
var myDirective = Vue.directive('my-directive')

 1.如果定义对象,包含以下几个钩子函数:                

  • bind‌:指令首次绑定到元素时调用,仅调用一次。
  • inserted‌:被绑定元素插入父节点时调用。
  • update‌:被绑定元素所在模板更新时调用。
  • componentUpdated‌:被绑定元素所在组件的所有子组件更新后调用。
  • unbind‌:指令与元素解绑时调用‌。

 2.钩子函数的参数

     每个钩子函数接收以下参数:
  • el‌:指令所绑定的元素,可以用来直接操作DOM。
  • binding‌:一个对象,包含指令名、绑定值、旧值、表达式、参数和修饰符等信息。
  • vnode‌:Vue编译生成的虚拟节点。
  • oldVnode‌:上一个虚拟节点,仅在updatecomponentUpdated钩子中可用

三、示例使用:

自定义一个改变元素背景颜色的指令,且颜色由v-background后的赋值给出

  定义指令
Vue.directive('background', {bind(el,binding) {el.style.backgroundColor= binding.value;}
});
在标签上使用指令
<div v-background="black">Hello Vue!</div>

四、场景:需要使用登录后返回的权限字符,对按钮进行权限控制

 路由配置:
{path: '/permission',component: Layout,name: ' ',meta: {btnPermissions: ['admin', 'supper', 'normal']
},
 指令配置:
import Vue from 'vue'
/** 权限指令 **/
const has = Vue.directive('has', {bind: function (el, binding, vnode) {// 获取页面按钮权限let btnPermissionsArr = [];if(binding.value){// 如果指令传值,获取指令参数,根据指令参数和当前登录人按钮权限做比较btnPermissionsArr = Array.of(binding.value);}else{// 否则获取路由中的参数,根据路由的 btnPermissionsArr 和当前登录人按钮权限做比较btnPermissionsArr = vnode.context.$route.meta.btnPermissions;}if (!Vue.prototype.$_has(btnPermissionsArr)) {el.parentNode.removeChild(el);}}
});
// 权限检查方法
Vue.prototype.$_has = function (value) {let isExist = false;// 获取用户按钮权限let btnPermissionsStr = sessionStorage.getItem("btnPermissions");if (btnPermissionsStr == undefined || btnPermissionsStr == null) {return false;}if (value.indexOf(btnPermissionsStr) > -1) {isExist = true;}return isExist;
};
export {has}

 使用:

<el-button type="primary" v-has> </el-button>

http://www.xdnf.cn/news/13735.html

相关文章:

  • 【AI部署】腾讯云GPU-常见故障—SadTalker的AI数字人视频—未来之窗超算中心 tb-lightly
  • JAVA中多线程的经典案例
  • 4.黑马学习笔记-SpringMVC(P43-P47)
  • 学习设计模式《一》——简单工厂
  • 算法驱动光场革命:SLM技术引领智能光学新时代
  • 用 NLP + Streamlit,把问卷变成能说话的反馈
  • 红宝书第五十一讲:Web Components:创造你自己的HTML标签
  • 习题2.3 数列求和-加强版
  • PHP发送邮件
  • 【刷题Day19】HTTP的各个版本(浅)
  • 记录git stash误删除恢复方法
  • 探索 JavaScript 中的 Promise 高级用法与实战
  • 什么是MMOE?
  • 坐标上海,20~40K的面试强度
  • Android Studio 常见报错
  • 计算机网络——应用层
  • 济南通过首个备案生活服务大模型,打造行业新标杆
  • 【人工智能】Prompt攻击与防范策略总结
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • ELF2开发板的ubuntu系统的ax200 wifi配网
  • Vue 3.0 Composition API 与 Vue 2.x Options API 的区别
  • 8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发
  • 2025MathorcupC题 音频文件的高质量读写与去噪优化 保姆级教程讲解|模型讲解
  • Docker中镜像、容器、仓库三者之间的关系
  • 第 8 期:条件生成 DDPM:让模型“听话”地画图!
  • Hadoop的三大结构及各自的作用?
  • TDengine Restful 接口API
  • excel解析图片pdf附件不怕
  • ESP8266简单介绍
  • 2025年山东燃气瓶装送气工考试真题练习