vue的自定义指令

news/2024/11/29 9:35:13/

      在开发的过程中,我们虽然使用过很多vue的内置指令,如;v-if、 v-for v-model、v-show

但是没有自己写过一个自定义的指令,因为要做用户的权限操作,就自己写一个v-perssion的指令。

首先我们看一下官方的描述:

自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。

一个自定义指令由一个包含类似组价生命周期钩子的对象来定义。钩子函数会接受到指令所绑定元素作为参数。我们看一下官方给出的自动聚焦的

const focus = {mounted:(el)=>{el.focus()}}
export default {directives :{focus}
}<input v-foucs/>

我们在看一下指令钩子:

const myDirective = {// 在绑定元素的 attribute 前// 或事件监听器应用前调用created(el, binding, vnode, prevVnode) {// 下面会介绍各个参数的细节},// 在元素被插入到 DOM 前调用beforeMount(el, binding, vnode, prevVnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都挂载完成后调用mounted(el, binding, vnode, prevVnode) {},// 绑定元素的父组件更新前调用beforeUpdate(el, binding, vnode, prevVnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都更新后调用updated(el, binding, vnode, prevVnode) {},// 绑定元素的父组件卸载前调用beforeUnmount(el, binding, vnode, prevVnode) {},// 绑定元素的父组件卸载后调用unmounted(el, binding, vnode, prevVnode) {}
}

我们可以看到在元素的不同生命周期中有对应的钩子函数。我们可以在合适的钩子函数中去使用。

我们可以看到每一个钩子函数中基本包含了el,binding,vnode,prevNode

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

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

      value:传递给指令的值。eg:v-dome="1+1",值是2

     oldValue:之前的值,仅在beforeUpdate和update中可用,无论值是否更改,它都可用。

     arg:传递给指令的参数v-dome:foo中参数是“foo”

    modifiers:一个包含修饰符的对象 (如果有的话)。例如在 v-dome.foo.bar 中,修饰符对        象是 { foo: true, bar: true }。
    instance:使用该指令的组件实例。
    dir:指令的定义对象。
    vnode:代表绑定元素的底层 VNode。

     prevNode:之前的渲染中代表指令所绑定元素的 VNode。仅在 beforeUpdate 和 updated 钩子       中可用。

举例来说,像下面这样使用指令:

<div v-example:foo.bar="baz">

binding 参数会是一个这样的对象:

{arg: 'foo',modifiers: { bar: true },value: /* `baz` 的值 */,oldValue: /* 上一次更新时 `baz` 的值 */
}


http://www.ppmy.cn/news/39682.html

相关文章

打造开箱即用的js工具库之xijs更新指南(v1.2.2)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用的js函数问题, 帮助开发者更高效的进行业务开发.接下来就和大家一起分享一下v1.2.2 版本的更新内容.github: https://github.com/MrXujiang/xijs1. 添加常用判断函数该模块主要由知乎作者 萌萌你萌不萌啊 贡献…

朴素贝叶斯算法

# -*-coding:utf-8-*- """ Author: sunchang Desc: 代码4-7 朴素贝叶斯实现对异常账户检测 """ import numpy as np class NaiveBayesian: def __init__(self, alpha): self.classP dict() self.classP_f…

蓝桥杯真题05

重新排序 问题描述 给定一个数组 A 和一些查询 Li,Ri 求数组中第 Li 至第 Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可以增加多少? 输入格式 输入第一行包含…

什么性格的人适合报考地质学类专业?(高考志愿填报选专业)

地质学 是一门涉及自然科学、人文科学等多个领域的综合性学科&#xff0c;它需要学生具备一定的理论素养和实践能力。在选择地质学类专业时&#xff0c;应该考虑自己的性格特点&#xff0c;以便更好地适应这门学科。 也有很多同学表示&#xff0c;我不清楚自己的性格有什么特征…

HTML5 内联 SVG

文章目录HTML5 内联 SVG什么是SVG&#xff1f;SVG优势浏览器支持把 SVG 直接嵌入 HTML 页面SVG 与 Canvas两者间的区别Canvas 与 SVG 的比较HTML5 内联 SVG HTML5 支持内联 SVG。 什么是SVG&#xff1f; SVG 指可伸缩矢量图形 (Scalable Vector Graphics)SVG 用于定义用于网…

c#编码问题

产生乱码的原因&#xff08;只有文本文件才会乱码&#xff09;&#xff1a;文本文件存储时采用的编码&#xff0c;与读取时采用的编码不一致&#xff0c;就会造成乱码问题。解决&#xff1a;采用统一的编码就ok. 文本文件编码&#xff0c;文本文件有不同的存储方式&#xff0c;…

第一次在大厂工作的感想——滴滴

文章目录前言相处氛围工作时间培养方案学习方面未来展望前言 很久没更新了呀&#xff0c;因为最近比较忙。二月底刚结束第一段实习&#xff0c;紧接着就拿到了滴滴offer&#xff0c;在学校呆了半个月就开启了第二段实习之旅。从浙江到河南再到北京&#xff0c;仅隔半个月。这次…

【python设计模式】6、装饰器模式

哲学思想 装饰器模式是一种结构型设计模式&#xff0c;其哲学思想是通过组合和装饰对象来扩展其功能&#xff0c;而不需要修改其底层代码或继承新的类。它遵循了"开放封闭原则"&#xff0c;即对扩展开放&#xff0c;对修改关闭。 该模式的核心概念是将一个类包装在…