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

Vue3 自定义指令

1. 自定义指令

小满的学习视频
vue官网自定义指令的解释
常用的自定义指令

2. 通过代码了解自定义指令

  1. 自定义指令必须以v 开头的驼峰式命名的变量
  2. 在模板中使用时需要用-分割自定义指令
<template><div class="btns"><!-- v-has-show分割后的指令 --><button v-has-show>创建</button></div>
</template><script setup lang="ts">
import { Directive } from "vue";
// 自定义指令vHasShow,在模板中使用-分割为:v-has-show
const vHasShow:Directive = (el,binding)=>{console.log(el,binding);
}
</script>

结果:
在这里插入图片描述

3. 指令的钩子传递的参数中包含什么

  • el:指令绑定到的元素。这可以用于直接操作 DOM。

  • binding:一个对象,包含以下属性。

    • value:传递给指令的值。例如在 v-my-directive=“1 + 1” 中,值是 2。
    • oldValue:之前的值,仅在 beforeUpdate 和 updated 中可用。无论值是否更改,它都可用。
    • arg:传递给指令的参数 (如果有的话)。例如在 v-my-directive:foo 中,参数是 “foo”。
    • modifiers:一个包含修饰符的对象 (如果有的话)。例如在 v-my-directive.foo.bar 中,修饰符对象是 { foo: true, bar: true }。
    • instance:使用该指令的组件实例。
    • dir:指令的定义对象。
  • 示例:

const baz = ref("创建按钮") <button v-has-show:foo#bot.bar.top ='baz'>创建</button>

结果
在这里插入图片描述

  • 除了 el 外,其他参数都是只读的,不要更改它们。若你需要在不同的钩子间共享信息,推荐通过元素的 dataset attribute 实现。

4. 示例:用户权限

<template><div class="btns"><button v-has-show="'shop:create'">创建</button><button v-has-show="'shop:update'">修改</button><button v-has-show="'shop:delete'">删除</button></div>
</template><script setup lang="ts">
import { Directive } from "vue";
// 如果有一个用户
const userId = "xiaoman-zx"
// 服务器返回此用户的权限
const permissions = ['xiaoman-zx:shop:create',// 'xiaoman-zx:shop:update','xiaoman-zx:shop:delete'
]
// 通过用户权限和按钮权限进行对比,如果用户权限包含按钮权限,则显示按钮,否则隐藏按钮
const vHasShow:Directive = (el,binding)=>{if(!permissions.includes(userId +":"+ binding.value)){// 通过el直接操作domel.style.display = 'none'}
}
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【网络安全】服务基础第一阶段——第二节:网络测试与用户
  • 学习记录:js算法(十三):移动零、验证回文串
  • 考研备考是选择电子学习工具无纸化学习?还是纸质版训练考感?
  • 《javaEE篇》--线程池
  • C++ 适配器 priority_queue(优先级队列)
  • Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具
  • 【教程】Leetcode 必知必会常用函数(C 语言版)
  • C# 时间日期运算
  • HarmonyOS NEXT 地图服务中‘我的位置’功能全解析
  • 基于机器学习的二手房房价数据分析与价格预测模型
  • 上传PDF、DOC文件到SAP HCM系统中案例
  • CSS文本样式(二)
  • Day16_Zookeeper
  • (152)时序收敛--->(02)时序收敛二
  • sql主从表的区分
  • [译]前端离线指南(上)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android 架构优化~MVP 架构改造
  • dva中组件的懒加载
  • Java|序列化异常StreamCorruptedException的解决方法
  • jdbc就是这么简单
  • Python利用正则抓取网页内容保存到本地
  • SSH 免密登录
  • 给github项目添加CI badge
  • 精彩代码 vue.js
  • 微信小程序开发问题汇总
  • 物联网链路协议
  • 携程小程序初体验
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ###C语言程序设计-----C语言学习(3)#
  • ###项目技术发展史
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $GOPATH/go.mod exists but should not goland
  • (19)夹钳(用于送货)
  • (function(){})()的分步解析
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三) diretfbrc详解
  • (五)IO流之ByteArrayInput/OutputStream
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)四层和七层负载均衡的区别
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • **PHP二维数组遍历时同时赋值
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net Core中Quartz的使用方法
  • .net 反编译_.net反编译的相关问题