Vue 教程 自定义指令 + 生命周期全解析 📅 发布时间:2026/7/9 13:44:21 👁️ 浏览次数: Vue 3 自定义指令 完整生命周期详解2025–2026 实用版Vue 3 的自定义指令和组件生命周期是中高级开发中非常高频的内容尤其在以下场景中几乎必考/必用复杂表单自动聚焦、输入防抖、权限显隐拖拽、长按、水印、懒加载图片第三方库集成图表 resize、虚拟滚动优化调试/埋点/权限控制指令下面把自定义指令和组件生命周期放在一起讲解因为它们在实际项目中经常结合使用。一、Vue 3 组件生命周期Composition API 版为主Vue 3 Composition API 使用onXXX钩子函数Options API 则使用beforeCreate等选项。阶段Options APIComposition API执行时机最常用场景是否异步beforeCreatebeforeCreate—不推荐实例初始化之前几乎不用同步createdcreated—不推荐数据响应式处理完成可访问 data / props同步beforeMountbeforeMountonBeforeMount模板编译完成即将挂载到 DOM 前同步mountedmountedonMounted组件挂载完成DOM 已渲染可操作真实 DOM同步beforeUpdatebeforeUpdateonBeforeUpdate数据变化 → 重新渲染前可获取旧 DOM 状态同步updatedupdatedonUpdatedDOM 更新完成注意不要在这里修改响应式数据同步beforeUnmountbeforeUnmountonBeforeUnmount组件即将卸载清理定时器、事件监听、订阅等同步unmountedunmountedonUnmounted组件完全卸载DOM 已移除同步activatedactivatedonActivatedkeep-alive 组件被激活时同步deactivateddeactivatedonDeactivatedkeep-alive 组件失活时同步errorCapturederrorCapturedonErrorCaptured捕获子组件错误可返回 false 阻止抛出同步renderTracked—onRenderTracked响应式依赖被追踪调试用—renderTriggered—onRenderTriggered响应式依赖被触发重新渲染调试用—serverPrefetch—onServerPrefetchSSR 预取数据Nuxt / Vite SSR 常用—最常用的 5 个钩子日常开发占比 90%onMounted→ 获取 DOM、发起首次请求、初始化第三方库onBeforeUnmount/onUnmounted→ 清理定时器、事件监听、WebSocket 断开onUpdated→ DOM 更新后做一些微调慎用避免死循环onActivated/onDeactivated→ keep-alive 场景列表缓存、音频播放暂停onErrorCaptured→ 组件级错误边界代码示例组合式 API 完整写法script setup import { ref, onMounted, onBeforeUnmount, onActivated, onDeactivated } from vue const count ref(0) let timer null onMounted(() { console.log(组件已挂载可以操作 DOM) timer setInterval(() count.value, 1000) }) onBeforeUnmount(() { console.log(组件即将卸载清理资源) clearInterval(timer) }) onActivated(() { console.log(keep-alive 组件被激活) // 可重新启动轮询、视频播放等 }) onDeactivated(() { console.log(keep-alive 组件失活) // 暂停轮询、视频等 }) /script二、Vue 3 自定义指令v-xxxVue 3 自定义指令的钩子函数比 Vue 2 精简了很多统一成了6 个生命周期钩子名称Options API 写法Composition API 写法directive执行时机是否传入 elcreatedcreatedcreated指令绑定到元素时在 beforeMount 之前是beforeMountbeforeMountbeforeMount元素挂载前是mountedmountedmounted元素挂载完成后最常用是beforeUpdatebeforeUpdatebeforeUpdate包含组件的 VNode 更新前是updatedupdatedupdated包含组件的 VNode 更新后是beforeUnmountbeforeUnmountbeforeUnmount元素卸载前是unmountedunmountedunmounted元素卸载后最常用于清理是最常用的是mountedunmounted三、自定义指令完整写法对比三种方式方式1全局注册main.js / main.ts// main.jsimport{createApp}fromvueimportAppfrom./App.vueconstappcreateApp(App)// 简单示例v-focus 自动聚焦app.directive(focus,{mounted(el){el.focus()}})// 带清理的示例v-longpress 长按 500ms 触发app.directive(longpress,{mounted(el,binding){lettimernullconststart(e){if(e.typeclicke.button!0)returntimersetTimeout((){binding.value(e)// 执行绑定的函数},500)}constcancel()clearTimeout(timer)el.addEventListener(mousedown,start)el.addEventListener(touchstart,start)el.addEventListener(click,cancel)el.addEventListener(mouseout,cancel)el.addEventListener(touchend,cancel)el.addEventListener(touchcancel,cancel)// 推荐把清理函数存到 el 上el._longpressCleanup(){el.removeEventListener(mousedown,start)// ... 移除所有监听clearTimeout(timer)}},beforeUnmount(el){// 组件卸载时自动清理if(el._longpressCleanup){el._longpressCleanup()}}})app.mount(#app)方式2局部注册script setup中使用script setup import { directive } from vue const vPermission { mounted(el, binding) { if (!hasPermission(binding.value)) { el.parentNode?.removeChild(el) } } } // 使用方式 defineOptions({ directives: { permission: vPermission } }) /script template button v-permissionuser:edit编辑/button /template方式3最推荐 —— 使用 composable 创建可复用指令// composables/useFocus.jsimport{onMounted,onBeforeUnmount}fromvueexportfunctionuseFocus(){constfocusDirective{mounted(el){el.focus()}}return{focusDirective}}script setup import { useFocus } from /composables/useFocus const { focusDirective } useFocus() /script template input v-focus / /template四、经典自定义指令合集面试 项目必备指令名称功能常用钩子典型实现要点v-focus自动聚焦mountedel.focus()v-copy一键复制内容mounteddocument.execCommandv-lazy-img图片懒加载mounted IntersectionObserverv-longpress长按触发mounted 定时器清理v-permission按钮级权限控制mounted判断权限 → remove 或 display:nonev-debounce输入防抖beforeUpdate updatedv-resize监听元素尺寸变化mountedResizeObserverv-watermark页面/元素水印mountedcanvas 或 div 叠加v-draggable拖拽移动mounted mousemovev-loading自定义 loading 遮罩mounted / updated五、总结面试/项目常问的 10 个问题Vue 3 自定义指令比 Vue 2 少了哪些钩子为什么自定义指令的el、binding、vnode、prevNode分别是什么为什么推荐在beforeUnmount或unmounted做清理如何让自定义指令支持修饰符.prevent .stop 等v-model在自定义组件和自定义指令中的区别组件的onBeforeUnmount和指令的beforeUnmount执行顺序如何调试自定义指令Vue Devtools 是否支持自定义指令如何获取组件实例getCurrentInstance为什么很多 UI 库如 Element Plus大量使用自定义指令你写过哪些自定义指令解决了什么痛点有具体想实现的自定义指令比如 v-permission、v-lazy、v-draggable需要完整代码示例吗或者想看某个生命周期钩子在真实业务中的典型用法可以直接告诉我
【网络安全】六大知名Web安全漏洞靶场 前言 如果想搞懂一个漏洞,最好的方法是先编写出这个漏洞,然后利用它,最后修复它。漏洞靶场模拟真实环境,它为网络安全人员提供了一个安全可控的平台,用于发现、评估和测试应用程序、系统或网络设备的安全漏洞。WEB漏洞… 2026/5/17 2:07:49
【渗透测试】新手必练的15个靶场,来看下有没有你熟悉的! 前言 相信很多小伙伴们在学习渗透测试的时候,不知道如何开始,那么这下面15个靶场对你的学习将会有很大的帮助! 靶场推荐 1、Try Hack Me 官网:https://tryhackme.com/ Try Hack Me是一个在线渗透测试平台,提供丰富… 2026/7/8 21:56:21
2025年 Java 面试八股文 2025–2026 年 Java 后端面试(尤其是金九银十、春招秋招、社招)的高频“八股文”已经高度内卷化。面试官越来越倾向于**“八股文 项目场景 真实问题解决”**的组合考察。 下面给你一份2025–2026 年仍然最主流、最常被问到的八股文分类汇总࿰… 2026/5/17 2:07:48
基于MAX77654与STM32L152RE的高效电源管理方案设计 1. 项目背景与核心需求在嵌入式系统设计中,电源管理一直是决定产品成败的关键因素。特别是在物联网终端、便携式医疗设备等电池供电场景中,如何平衡性能与功耗,成为工程师面临的核心挑战。这次我们要探讨的,正是基于MAX77654 PMIC… 2026/7/9 13:43:42
STM32F091RC与CMT-8540S-SMT构建高效音频系统 1. 为什么选择STM32F091RC和CMT-8540S-SMT构建声音交互系统在嵌入式音频应用领域,STM32F091RC微控制器与CMT-8540S-SMT音频模块的组合堪称黄金搭档。STM32F091RC作为意法半导体推出的Cortex-M0内核MCU,具备48MHz主频和256KB Flash存储,其内置… 2026/7/9 13:41:41
【JAVA毕设源码分享】基于SpringBoot的在线招聘系统系统的设计与实现(程序+文档+代码讲解+一条龙定制) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 13:39:41
挑选口碑较好的电缆路径探测仪可参照的实用判断方法梳理 在全国各地区的电力运维、市政施工、园区管理场景中,电缆路径探测仪是排查管线隐患、定位故障的核心设备。尤其华东制造业园区、华南沿海盐雾环境下,设备适配性要求更高,本文梳理了实用选购判断方法,帮各地客户选到适配自身需求的… 2026/7/9 13:37:40
赛事直播没互动?AI运动相机解锁观众互动新玩法 如今篮球、足球、羽毛球、网球、匹克球、排球、冰球、橄榄球等大众赛事直播,早已不局限于“单向画面传输”。很多赛事组织方都面临同一个核心痛点:专业赛事画面清晰稳定,但直播间氛围冷清、观众参与度低、用户留存差,赛事传播影响… 2026/7/9 13:37:40
高精度数据采集方案:ADS122U04与TM4C1294NCPDT应用指南 1. 项目背景与核心器件选型在工业测量和传感器信号采集领域,将微弱的模拟信号转换为高精度数字表示一直是设计难点。ADS122U04作为TI推出的24位Δ-Σ ADC,配合TM4C1294NCPDT这款ARM Cortex-M4内核微控制器,构成了一个完整的精密数据采集解决方… 2026/7/9 13:31:38
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08