VUE3 自定义指令的介绍
自定义指令的概述
在 Vue 中,自定义指令是一种机制,允许开发者在模板中直接操作 DOM 元素,执行一些低级别的操作。Vue 提供了几个内置指令(如 v-if
、v-for
、v-model
等),但当我们需要一些特定功能时,可以创建自己的自定义指令。这为我们提供了灵活性,允许在模板中更直接地控制 DOM 元素的行为。
自定义指令通常用来操作 DOM,比如动态控制元素的样式、执行一些行为(例如监听事件或获取焦点)等。
注册全局和局部自定义指令
Vue 中的自定义指令有两种注册方式:全局注册和局部注册。
1. 全局自定义指令
全局指令是应用中的任何组件都可以使用的指令。它通过 app.directive()
在根实例中注册。
示例代码(全局注册):
// main.js
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);// 全局注册自定义指令 v-focus
app.directive('focus', {mounted(el) {el.focus(); // 元素挂载后,自动聚焦}
});app.mount('#app');
在模板中使用:
<input v-focus />
2. 局部自定义指令
局部指令是只在某个特定组件中有效的指令。它们通过组件的 directives
选项进行注册。
示例代码(局部注册):
// MyComponent.vue
<template><input v-focus />
</template><script>
export default {directives: {focus: {mounted(el) {el.focus(); // 只有在这个组件中才有效}}}
};
</script>
在此例中,v-focus
只在 MyComponent
组件中生效,而其他组件无法访问该指令。
自定义指令的基本使用
自定义指令需要通过 app.directive
或 directives
选项进行注册。指令对象可以包含多个生命周期钩子,来实现对 DOM 元素的操作。
生命周期钩子
自定义指令支持多个生命周期钩子,帮助我们在不同阶段操作 DOM 元素:
以下是 Vue 3 自定义指令生命周期钩子的详细描述:
-
created
:在绑定元素的属性或事件监听器应用前调用。此时,指令的元素还没有插入到 DOM 中,但可以用于初始化某些属性或事件的设置。 -
beforeMount
:在元素被插入到 DOM 前调用。你可以在这里进行一些操作,比如在 DOM 中插入额外内容或者做一些预处理。 -
mounted
:在元素插入到 DOM 后调用。此时,元素已经可以访问 DOM,通常用于对已插入的 DOM 元素进行操作。 -
beforeUpdate
:在绑定元素的父组件及它的所有子节点更新前调用。这个钩子在更新阶段非常有用,可以用来准备或比较更新之前的状态。 -
updated
:在绑定元素的父组件及它的所有子节点更新后调用。这个钩子在元素更新后可以用来处理更新后的状态。 -
beforeUnmount
:在绑定元素的父组件卸载前调用。可以用于清理资源、移除事件监听等操作。 -
unmounted
:在绑定元素的父组件卸载后调用。通常用于销毁相关的操作,释放资源,清理事件监听等。
示例代码:
app.directive('demo', {beforeMount(el, binding) {console.log('beforeMount', binding);},mounted(el, binding) {console.log('mounted', binding);},updated(el, binding) {console.log('updated', binding);},beforeUnmount(el, binding) {console.log('beforeUnmount', binding);},unmounted(el, binding) {console.log('unmounted', binding);}
});
传递参数和修饰符
指令不仅可以接收值,还可以接收参数和修饰符,帮助我们进一步定制指令的行为。
1. 参数
自定义指令支持传递参数(arg
),它可以用于标识不同的行为或操作。例如,可以在指令中传递不同的操作类型。
<p v-color:red="'blue'">这段文字会变蓝色</p>
app.directive('color', {mounted(el, binding) {if (binding.arg === 'red') {el.style.color = binding.value; // 设置颜色为传递的值}}
});
2. 修饰符
修饰符(modifiers
)是以点号(.
)为前缀的标志,用于指定特定的行为。例如,v-focus
可以结合 .uppercase
修饰符来将文本转换为大写。
<p v-color.bold="'red'">这段文字是红色并且加粗</p>
app.directive('color', {mounted(el, binding) {if (binding.modifiers.bold) {el.style.fontWeight = 'bold'; // 如果有 .bold 修饰符,设置加粗}el.style.color = binding.value; // 设置颜色}
});
一个复杂的例子
让我们结合参数和修饰符来实现一个动态效果的自定义指令,支持修改颜色并控制字体样式。
app.directive('textStyle', {mounted(el, binding) {// 默认颜色为红色const color = binding.value || 'red';el.style.color = color;// 检查修饰符if (binding.modifiers.bold) {el.style.fontWeight = 'bold';}if (binding.modifiers.italic) {el.style.fontStyle = 'italic';}}
});
模板中使用:
<p v-textStyle="'green'" class="highlight">绿色的文字</p>
<p v-textStyle.bold.italic="'blue'">蓝色加粗斜体的文字</p>
总结
- 全局指令:通过
app.directive()
注册,所有组件都能访问。 - 局部指令:通过组件的
directives
选项注册,只在该组件中有效。 - 自定义指令通过生命周期钩子来操作 DOM,支持传递参数和修饰符,以便进行细粒度的控制。
- 常见生命周期钩子包括
beforeMount
、mounted
、updated
等。
自定义指令可以在 Vue 中进行复杂的 DOM 操作,并且提供了灵活的参数传递、修饰符支持等特性,使得我们能够定制化地实现各种 UI 行为。如果你有更多问题,或者需要更具体的案例,欢迎继续提问!
相关文章:
VUE3 自定义指令的介绍
自定义指令的概述 在 Vue 中,自定义指令是一种机制,允许开发者在模板中直接操作 DOM 元素,执行一些低级别的操作。Vue 提供了几个内置指令(如 v-if、v-for、v-model 等),但当我们需要一些特定功能时&#…...
HTML学习笔记记录---速预CSS(2) 复合属性、盒子模型、边框线、浮动、定位
复合属性写法: {font: font-style font-weitght font-size/line-height font-family} {font: 样式 粗细 字号 字体} (书写瞬间为固定的不可更改) block 块级元素 div inline 行内元素 span inline-block 行内块元素 …...
二 RK3568 固件中打开 ADB 调试
一 usb adb Android 系统,设置->开发者选项->已连接到计算机 打开,usb调试开关打开 通过 usb otg 口连接 开发上位机 (windows/linux) 上位机安装 adb 服务之后 , 通过 cmd/shell: #1 枚举设备 adb devices #2 进入 android shell adb shell # 3 验证上传下载…...

centos9设置静态ip
CentOS 9 默认使用 NetworkManager 管理网络,而nmcli是 NetworkManager 命令行接口的缩写,是一个用来进行网络配置、管理网络连接的命令工具,可以简化网络设置,尤其是在无头(没有图形界面)环境下。 1、 cd…...

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
这里写目录标题 什么是Selenium?Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本脚本执行结果常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo…...
内网服务器添加共享文件夹功能并设置端口映射
参考网址 https://blog.csdn.net/Think88666/article/details/118438465 1.服务器安装smb服务,由于网路安全不允许使用默认端口(445,446),于是修改端口为62445、62446。 2.每台需要共享的电脑都要修改端口映射&#x…...

第三十六章 Spring之假如让你来写MVC——拦截器篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
TypeScript语言的学习路线
TypeScript语言的学习路线 TypeScript(TS)是由Microsoft开发的一种开源编程语言,是JavaScript的超集,提供了严格的类型检查和基于类的面向对象编程特性。随着前端开发的不断进步,TypeScript逐渐成为了现代前端开发的主…...

Python爬虫-汽车之家各车系周销量榜数据
前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...
C#格式化输出
上一期: C#格式化输出-CSDN博客 字符串插值 字符串插入功能,使得我们可以更直观地嵌入表达式到字符串中,只需要在字符串前加上$符号即可实现这一点。着中国方法不仅提高了代码的可读性,而且简化了字符串构造的过程。 使用Inse…...

Open FPV VTX开源之默认MAVLink设置
Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…...
【初识扫盲】逆概率加权
我们正在处理一个存在缺失数据的回归模型,并且希望采用一种非参数的逆概率加权方法来调整估计,以应对这种缺失数据的情况。 首先,我们需要明确问题的背景。我们有样本 { ( Y i , X i , r i ) : i 1 , … , n } \left\{\left(Y_i, \boldsym…...

Ubuntu中双击自动运行shell脚本
方法1: 修改文件双击反应 参考: https://blog.csdn.net/miffywm/article/details/103382405 chmod x test.sh鼠标选中待执行文件,在窗口左上角edit菜单中选择preference设计双击执行快捷键,如下图: 方法2: 设置一个应用 参考: https://blo…...
理解AJAX与Axios:异步编程的世界
理解AJAX与Axios:异步编程的世界 在现代Web开发中,异步编程作为一种处理复杂操作的方式,已经成为不可或缺的一部分。AJAX(Asynchronous JavaScript and XML)和Axios是两种实现异步请求的流行技术。本文将深入探讨这两…...
分组通道自注意力G-CSA详解及代码复现
G-CSA定义 G-CSA (Grouped Channel Self-Attention) 是一种创新性的视觉注意力机制,巧妙地结合了卷积和自注意力的优势。通过将输入特征图划分为多个独立的通道组,在每个组内执行自注意力操作,G-CSA实现了高效的全局信息交互,同时保留了局部特征细节。这种方法不仅提高了模…...

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…...

玩转大语言模型——langchain调用ollama视觉多模态语言模型
系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…...
Github 2025-01-11 Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2025-01-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10C项目1Swift项目1Yazi - 快速终端文件管理器 创建周期:210 天开发语言:Rust协议类型:MIT LicenseStar数量:5668 个Fork数量:122…...
【学习】【记录】【分享】微型响应系统
前言 本篇博客源于对Vue和React框架中响应式系统的好奇与探索。若文中存在任何错误或有更优的解决方案,欢迎各位读者不吝指正,让我们一起学习,共同进步。 1. 什么是响应式系统 响应式系统是一种编程范式,它允许数据的变化自动地…...

vue城市道路交通流量预测可视化系统
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站、收藏、不迷路! 项目亮点 编号:R09 🚇 网站大屏管理三大前端、vuespringbootmysql、前后端分离架构 🚇 流量预测道路查询…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...

[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...