vue3自定义指令

ops/2025/3/3 10:24:55/

在 Vue 3 中,自定义指令是一种强大的工具,它允许你对普通 DOM 元素进行底层操作,以实现一些特殊的交互效果或功能。下面将详细介绍 Vue 3 自定义指令的相关内容,包括基本用法、指令钩子函数、传参以及全局和局部自定义指令的使用。

基本用法

自定义指令可以在组件内部局部注册,也可以在应用实例中全局注册。指令名通常采用 kebab-case(短横线分隔)的命名方式。

局部自定义指令

在组件内部使用 directives 选项来注册局部自定义指令。

<template><input v-focus />
</template><script setup>
// 局部自定义指令
const vFocus = {// 指令钩子函数,在元素挂载后执行mounted(el) {// 让元素获取焦点el.focus()}
}
</script>

在上述代码中,定义了一个名为 v-focus 的局部自定义指令,当绑定该指令的元素挂载到 DOM 后,会自动获取焦点。

全局自定义指令

在应用实例中使用 app.directive 方法来注册全局自定义指令,这样在整个应用中都可以使用该指令。

javascript">import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 全局自定义指令
app.directive('focus', {mounted(el) {el.focus()}
})app.mount('#app')

main.js 中注册了全局的 v-focus 指令,之后在任何组件中都能使用该指令。

指令钩子函数

自定义指令有多个钩子函数,用于在不同阶段执行操作。以下是各个钩子函数及其执行时机:

  • beforeMount:在元素挂载到 DOM 之前调用。
  • mounted:在元素挂载到 DOM 之后调用。
  • beforeUpdate:在元素更新之前调用,发生在虚拟 DOM 打补丁之前。
  • updated:在元素更新之后调用,发生在虚拟 DOM 打补丁之后。
  • beforeUnmount:在元素卸载之前调用。
  • unmounted:在元素卸载之后调用。
<template><div v-color="'red'">This is a colored div.</div>
</template><script setup>
const vColor = {beforeMount(el, binding) {// 在元素挂载前设置样式el.style.color = binding.value},mounted(el) {console.log('Element is mounted.')},beforeUpdate() {console.log('Element is about to update.')},updated() {console.log('Element has been updated.')},beforeUnmount() {console.log('Element is about to unmount.')},unmounted() {console.log('Element has been unmounted.')}
}
</script>

在这个例子中,v-color 指令在不同的生命周期阶段执行相应的操作,并且通过 binding.value 获取指令传递的参数。

指令传参

指令可以接收参数,参数通过指令绑定表达式传递,在钩子函数中可以通过 binding 对象获取。

<template><div v-color="'blue'" v-size="24">Styled div</div>
</template><script setup>
const vColor = {mounted(el, binding) {el.style.color = binding.value}
}const vSize = {mounted(el, binding) {el.style.fontSize = `${binding.value}px`}
}
</script>

在上述代码中,v-color 指令接收一个颜色值作为参数,v-size 指令接收一个字体大小值作为参数,在 mounted 钩子函数中使用 binding.value 获取这些参数并应用到元素上。

动态指令参数

指令的参数可以是动态的,通过在模板中使用 JavaScript 表达式来实现。

<template><div :[dynamicDirective]="dynamicValue">Dynamic directive</div>
</template><script setup>
import { ref } from 'vue'const dynamicDirective = ref('color')
const dynamicValue = ref('green')const vColor = {mounted(el, binding) {el.style.color = binding.value}
}
</script>

这里 dynamicDirectivedynamicValue 都是响应式的,当它们的值发生变化时,指令会相应地更新。

通过上述方法,你可以在 Vue 3 中灵活地创建和使用自定义指令,满足各种复杂的交互和功能需求。


http://www.ppmy.cn/ops/162739.html

相关文章

TCP的三次握手与四次挥手:建立与终止连接的关键步骤

引言 ‌TCP&#xff08;传输控制协议&#xff09;工作在OSI模型的传输层‌。OSI模型将计算机网络功能划分为七个层级&#xff0c;从底层到顶层依次是&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。传输层负责在网络节点之间提供可靠的端到端通信&a…

【算法系列】经典的堆排序算法

文章目录 堆排序算法什么是堆排序&#xff1f;二叉堆的概念 堆排序的基本步骤堆排序的详细流程构建最大堆维护最大堆排序过程Java代码实现 堆排序的图示步骤1. 初始的数组与堆2. 构建最大堆2.1. 检查节点9&#xff08;序号为3&#xff09;2.2. 检查节点6&#xff08;序号为2&am…

CF 118A.String Task(Java实现)

题目分析 输入一个字符串&#xff0c;遍历每一个字符&#xff0c;如果是元音字母就删除&#xff0c;辅音字母就在其前面增加一个.&#xff0c;且所有字母输出都是小写。 思路分析 将输入的字符串改为字符数组&#xff0c;考虑到任意位置插入的情况&#xff0c;所以主要选择Lin…

C++的类和对象入门

目录 目录 目录 一、类 1.1类的定义 1.2访问限定符 1.3类域 1.4类的命名规范 1.5class和struct的默认访问权限 二、类的实例化 2.2对象的大小和存储 2.3空类的大小 三、this指针 3.1this指针的定义 3.2this指针的作用 3.2.1区分同名变量和局部变量 3.2.2返回对象…

Lesson 2 Breakfast or lunch?

Lesson 2 Breakfast or lunch? 词汇 until prep. 直到…… 用法&#xff1a;not until 时间点 直到……才 区别&#xff1a;untiltill 意思相同 例句&#xff1a;直到午夜&#xff0c;我才睡着。    I did not fall in asleep until midnight.    她直到50多岁才结婚…

PHP的学习

PHP的基础前提【HTML、CSS】 第一步先进行VS cood的下载&#xff1a;Visual Studio Code - Code Editing. Redefined 【选择适合自己的电脑的版本eg:我就是64位的win】

Qt 中signals和slots、Q_SIGNAL和Q_LOT、Q_SIGNALS和Q_SLOTS的区别和使用

Qt 中signals和slots、Q_SIGNAL和Q_SLOT、Q_SIGNALS和Q_SLOTS的区别和使用 1.signals和slots 信号和槽函数需要在类的声明中明确声明。信号需要使用signals关键字&#xff0c;而槽函数可以使用slots关键字&#xff08;虽然在现代Qt中&#xff0c;槽函数也可以直接作为普通成员…

人工智能之数学基础:线性代数中的特殊矩阵

本文重点 矩阵是数学中一个重要的工具,在各个领域都有广泛的应用。其中,一些特殊矩阵由于具有独特的性质,在特定的问题中发挥着关键作用。 单位矩阵 单位矩阵是一种特殊的方阵,在矩阵乘法中起到类似于数字 “1” 的作用。对于一个的单位矩阵,其主对角线元素全为 1,其余…