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

Vue 3指令全解析:内置指令与自定义指令实战指南

Vue指令是模板语法的核心武器,它们以v-前缀的形式为HTML元素添加特殊功能。本文将深入探讨Vue 3中的指令系统,覆盖10+个核心指令的妙用,并手把手教你打造专属自定义指令。


一、Vue指令基础认知

指令本质上是DOM操作的语法糖,它们:

  • 监听DOM事件

  • 响应式更新视图

  • 实现条件渲染

  • 处理重复渲染

  • 操作DOM属性


二、必知必会的核心指令

1. 条件渲染双雄

<!-- v-if:彻底销毁/重建元素 -->
<div v-if="isVisible">我会被完全移除DOM</div><!-- v-show:仅切换display属性 -->
<span v-show="hasData" style="display: none">我保持DOM存在</span>

适用场景

  • v-if:切换频率低的大组件

  • v-show:高频切换的简单元素

2. 列表渲染利器

<ul><li v-for="(item, index) in items" :key="item.id">{{ index + 1 }}. {{ item.name }}</li>
</ul>

最佳实践

  • 始终使用:key

  • 避免v-forv-if同用

3. 双向绑定神器

<input v-model="searchText" type="text">
<!-- 等效于 -->
<input :value="searchText"@input="searchText = $event.target.value"
>

进阶用法

<CustomComponent v-model:title="pageTitle" />

4. 事件处理专家

<button @click.prevent="handleSubmit">提交</button>
<!-- 等价于 -->
<button v-on:click.prevent="handleSubmit">提交</button>

常用修饰符

  • .stop - 阻止冒泡

  • .prevent - 阻止默认

  • .once - 单次触发

5. 其他实用指令

<!-- 动态属性 -->
<img :src="dynamicSrc" :alt="imageAlt"><!-- 原始HTML输出 -->
<div v-html="rawHtmlContent"></div><!-- 初始化隐藏未编译模板 -->
<div v-cloak>{{ message }}</div>


三、打造你的专属指令

1. 指令生命周期钩子

const myDirective = {beforeMount() {},     // 元素插入前mounted() {},         // 元素插入后beforeUpdate() {},    // 更新前updated() {},         // 更新后beforeUnmount() {},   // 卸载前unmounted() {}        // 卸载后
}

2. 自动聚焦指令实战

// 全局注册
app.directive('focus', {mounted(el) {el.focus()}
})// 使用示例
<input v-focus>

3. 权限控制指令

// 局部注册
const permissionDirective = {mounted(el, binding) {const hasPermission = checkPermission(binding.value)if (!hasPermission) {el.style.display = 'none'}}
}// 使用示例
<button v-permission="'admin'">管理面板</button>

4. 滚动加载指令

v-intersect="{handler: onIntersect,options: { threshold: 0.5 }
}"

四、指令最佳实践守则

  1. 优先使用计算属性处理简单逻辑

  2. 避免过度操作DOM,考虑使用组件

  3. 命名采用小驼峰式(自动转换kebab-case)

  4. 及时清理副作用(如事件监听器)

  5. 组合式API封装复杂指令逻辑


五、性能优化要点

  • v-if vs v-show选择策略

  • v-forkey优化机制

  • 指令的懒加载实现

  • 使用memo缓存计算结果


六、典型应用场景

  1. 第三方库集成(如Tippy.js提示框)

  2. 表单验证增强

  3. 动画过渡控制

  4. 图片懒加载

  5. 权限控制体系

  6. 全局点击外部关闭


七、实战:创建波纹效果指令

const vRipple = {mounted(el) {el.addEventListener('click', (e) => {const circle = document.createElement('div')// ...波纹动画实现el.appendChild(circle)setTimeout(() => circle.remove(), 600)})}
}

结语

指令系统是Vue的灵魂特性之一,掌握它能让你:
✅ 提升代码复用率
✅ 增强视图控制力
✅ 实现优雅的DOM操作
✅ 构建可维护的抽象层

在Vue 3的组合式API加持下,指令开发变得更加灵活高效。建议从简单需求入手,逐步构建你的指令工具箱!


如果对你有帮助,请帮忙点个赞

相关文章:

Vue 3指令全解析:内置指令与自定义指令实战指南

Vue指令是模板语法的核心武器&#xff0c;它们以v-前缀的形式为HTML元素添加特殊功能。本文将深入探讨Vue 3中的指令系统&#xff0c;覆盖10个核心指令的妙用&#xff0c;并手把手教你打造专属自定义指令。 一、Vue指令基础认知 指令本质上是DOM操作的语法糖&#xff0c;它们&…...

Springboot 自动化装配的原理

Springboot 自动化装配的原理 SpringBoot 主要作用为&#xff1a;起步依赖、自动装配。而为了实现这种功能&#xff0c;SpringBoot 底层主要使用了 SpringBootApplication 注解。 首先&#xff0c;SpringBootApplication 是一个复合注解&#xff0c;它结合了 Configuration、…...

Linux——进程池

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 1.实现思路 思路&#xff1a;通过创建匿名管道&#xff0c;来实现父子进程之间的通信 注1&#xff1a;父写&#xff0c;子读 注2&#xff1a;匿名管道只能用来进行具有血管关系的进程…...

Qt基于等待条件QWaitCondition实现的任务队列模型示例

核心概念 Qt中的QWaitCondition是一个用于多线程同步的类&#xff0c;允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用&#xff0c;协调线程之间的执行顺序&#xff0c;适用于生产者-消费者模型、任务队列调度等场景。 ​wait()&#xff1a;使当前线程进…...

微服务即时通信系统---(六)语音识别子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程思想 服务代码实现 编写proto文件 服务端创建子类(SpeechRecognitionServiceImpl)完成RPC服务调用函数重写 SpeechRecognize(语音识别) 服务端完成语音识别子服务类(SpeechRecognitionServer) 注意 …...

JavaWeb基础专项复习5——请求对象和响应对象request and response

系列文章目录 1、JavaWeb基础专项复习1——XML文件-CSDN博客 2、JavaWeb基础专项复习2——JSP文件-CSDN博客 3、JavaWeb基础专项复习2——Servlet相关知识-CSDN博客 4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客 文章目录 系列文章目录文章目录1、Tom…...

mac下载MAMP6.8.1;解决mac使用小皮面板安装php7.4

因为mac的小皮面板没有php7.4了 链接&#xff1a;c9cc270e6961c17c.dmg官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 鹅选一 附上大佬写的教程&#xff1a;MAMP PRO教程 - 牛奔 - 博客园 更新一下&#xff0c;2-27 昨天已经可以使用php7.4了&#xff0c;我就在想能…...

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3) 前言本篇摘要12. LangChain原理及agents构建Gradio UI12.3 LangChain架构12.3.1 LangChain12.3.2 Integration Packages1. 概念2. 示例12.3.3 LangGraph1. 概念2. 示例12.3.4 LangGraph Platform1. 概览2. 优势分…...

redis --- 相关基础知识整理

目录 一、基本1、数据结构2、有序集合的编码1. 压缩列表&#xff08;Ziplist&#xff09;2. 跳跃列表&#xff08;SkipList&#xff09;3. 动态转换机制 二、应用场景三、持久化1、 RDB 持久化2、 AOF 持久化3、 混合持久化&#xff08;RDB AOF&#xff09;4、 RDB和AOF的对比…...

如何用 Python 进行机器学习

文章目录 前言1. 环境准备Python安装选择Python开发环境安装必要库 2. 数据收集与加载3. 数据探索与可视化4. 数据预处理5. 模型选择与训练6. 模型评估7. 模型调优8. 模型部署 前言 使用 Python 进行机器学习一般可以按照以下步骤进行&#xff0c;下面将详细介绍每个步骤及对应…...

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …...

解释Promise的工作原理及其状态

Promise的工作原理及其状态 1. 什么是Promise&#xff1f; Promise是JavaScript中的一种用于处理异步操作的对象。它代表一个可能在未来某个时间点完成的操作&#xff0c;并且可以有三种状态&#xff1a;待定&#xff08;pending&#xff09;、已解决&#xff08;fulfilled&a…...

SHELL32!ILCombine函数分析之连接两个idl

SHELL32!ILCombine函数分析之连接两个idl 第一部分&#xff1a; STDAPI_(LPITEMIDLIST) ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { // Let me pass in NULL pointers if (!pidl1) { if (!pidl2) { return NULL; …...

es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

Elasticsearch 生产集群部署架构及面试解析 在后端面试中&#xff0c;Elasticsearch&#xff08;ES&#xff09;是一个经常被问到的技术点&#xff0c;尤其是涉及到 生产环境的部署架构。面试官往往希望通过这个问题来验证你是否有真正的生产经验&#xff0c;而不仅仅是玩过一…...

Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

1. 信号与槽机制的基本原理 在 Qt 中&#xff0c;信号与槽机制是一种事件驱动的通信方式&#xff0c;用于对象之间的解耦交互。其关键特点如下&#xff1a; 信号不能直接调用 信号只是一个声明&#xff0c;并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…...

ollama和open-webui部署ds

博客地址&#xff1a; ollama和open-webui部署ds 引言 最近&#xff0c;deepseek是越来越火&#xff0c;我也趁着这个机会做了下私有化部署&#xff0c;我这边使用的ollama和 open-webui实现的web版本 ollama 简介 Ollama 是一个开源的工具&#xff0c;专门用于简化机器学…...

泛微Ecode新增Button调用服务器中的JSP页面里的方法

前言 前端Ecode调用 后端接口编写 JSP文件方法 总结 前言 因为我们是从之前E8版本升级到E9的&#xff0c;所以会有一些接口是通过jsp文件来实现前后端调用的&#xff0c;这里介绍的就是如果你有接口是写在jsp文件里面调用的&#xff0c;但是你又想在Ecode中调用的对应的接…...

LVS+Keepalived高可用群集配置案例

以下是一个 LVSKeepalived 高可用群集配置案例&#xff1a; 1、环境准备 LVS 主调度器&#xff08;lvs1&#xff09;&#xff1a;IP 地址为 192.168.8.101&#xff0c;心跳 IP 为 192.168.4.101LVS 备调度器&#xff08;lvs2&#xff09;&#xff1a;IP 地址为 192.168.8.102…...

杰发科技AC7801——滴答定时器获取时间戳

1. 滴答定时器 杰发科技7801内部有一个滴答定时器&#xff0c;该定时器是M0核自带的&#xff0c;因此可以直接用该定时器来获取时间戳。 同样&#xff0c;7803也可以使用该方式获取时间戳。 2. 滴答定时器原理 SysTick是一个24位的递减计数器&#xff0c;它从预设的重装载值…...

Pycharm使用matplotlib出现的问题(1、不能弹出图表 2、图表标题中文不显示)

Pycharm使用matplotlib出现的问题 问题1&#xff1a;Pycharm调试时出现&#xff1a;AttributeError: module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? 排查原因&#xff1a;可能是由于matplotlib后端设置不正确或与运行环境不兼容引…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...