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

VUE3 自定义指令的介绍

自定义指令的概述

在 Vue 中,自定义指令是一种机制,允许开发者在模板中直接操作 DOM 元素,执行一些低级别的操作。Vue 提供了几个内置指令(如 v-ifv-forv-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.directivedirectives 选项进行注册。指令对象可以包含多个生命周期钩子,来实现对 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,支持传递参数和修饰符,以便进行细粒度的控制。
  • 常见生命周期钩子包括 beforeMountmountedupdated 等。

自定义指令可以在 Vue 中进行复杂的 DOM 操作,并且提供了灵活的参数传递、修饰符支持等特性,使得我们能够定制化地实现各种 UI 行为。如果你有更多问题,或者需要更具体的案例,欢迎继续提问!

相关文章:

VUE3 自定义指令的介绍

自定义指令的概述 在 Vue 中&#xff0c;自定义指令是一种机制&#xff0c;允许开发者在模板中直接操作 DOM 元素&#xff0c;执行一些低级别的操作。Vue 提供了几个内置指令&#xff08;如 v-if、v-for、v-model 等&#xff09;&#xff0c;但当我们需要一些特定功能时&#…...

HTML学习笔记记录---速预CSS(2) 复合属性、盒子模型、边框线、浮动、定位

复合属性写法&#xff1a; {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 管理网络&#xff0c;而nmcli是 NetworkManager 命令行接口的缩写&#xff0c;是一个用来进行网络配置、管理网络连接的命令工具&#xff0c;可以简化网络设置&#xff0c;尤其是在无头&#xff08;没有图形界面&#xff09;环境下。 1、 cd…...

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!

这里写目录标题 什么是Selenium&#xff1f;Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本脚本执行结果常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo…...

内网服务器添加共享文件夹功能并设置端口映射

参考网址 https://blog.csdn.net/Think88666/article/details/118438465 1.服务器安装smb服务&#xff0c;由于网路安全不允许使用默认端口&#xff08;445&#xff0c;446&#xff09;&#xff0c;于是修改端口为62445、62446。 2.每台需要共享的电脑都要修改端口映射&#x…...

第三十六章 Spring之假如让你来写MVC——拦截器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

TypeScript语言的学习路线

TypeScript语言的学习路线 TypeScript&#xff08;TS&#xff09;是由Microsoft开发的一种开源编程语言&#xff0c;是JavaScript的超集&#xff0c;提供了严格的类型检查和基于类的面向对象编程特性。随着前端开发的不断进步&#xff0c;TypeScript逐渐成为了现代前端开发的主…...

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...

C#格式化输出

上一期&#xff1a; C#格式化输出-CSDN博客 字符串插值 字符串插入功能&#xff0c;使得我们可以更直观地嵌入表达式到字符串中&#xff0c;只需要在字符串前加上$符号即可实现这一点。着中国方法不仅提高了代码的可读性&#xff0c;而且简化了字符串构造的过程。 使用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. 源由 飞控图传…...

【初识扫盲】逆概率加权

我们正在处理一个存在缺失数据的回归模型&#xff0c;并且希望采用一种非参数的逆概率加权方法来调整估计&#xff0c;以应对这种缺失数据的情况。 首先&#xff0c;我们需要明确问题的背景。我们有样本 { ( 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鼠标选中待执行文件&#xff0c;在窗口左上角edit菜单中选择preference设计双击执行快捷键&#xff0c;如下图&#xff1a; 方法2: 设置一个应用 参考: https://blo…...

理解AJAX与Axios:异步编程的世界

理解AJAX与Axios&#xff1a;异步编程的世界 在现代Web开发中&#xff0c;异步编程作为一种处理复杂操作的方式&#xff0c;已经成为不可或缺的一部分。AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;和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分层架构的概念&#xff0c;下面我们来具体到每一层的具体内容进行讲解&#xff0c;每一层的每一个功能块力求用一个总览图&#xff0c;外加一个例子的图给大家进…...

玩转大语言模型——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框架中响应式系统的好奇与探索。若文中存在任何错误或有更优的解决方案&#xff0c;欢迎各位读者不吝指正&#xff0c;让我们一起学习&#xff0c;共同进步。 1. 什么是响应式系统 响应式系统是一种编程范式&#xff0c;它允许数据的变化自动地…...

vue城市道路交通流量预测可视化系统

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站、收藏、不迷路&#xff01; 项目亮点 编号&#xff1a;R09 &#x1f687; 网站大屏管理三大前端、vuespringbootmysql、前后端分离架构 &#x1f687; 流量预测道路查询…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...