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

Vue 中directive的钩子函数(bind、inserted 等)的作用及使用场景

大白话Vue 中directive的钩子函数(bind、inserted 等)的作用及使用场景。

在 Vue 里,指令(directive)是个超实用的东西,它能让你在不改动组件逻辑的情况下,给 HTML 元素添加一些特殊的行为。Vue 指令有好几个钩子函数,下面我就挨个给你讲讲这些钩子函数的作用和使用场景,还会附上带注释的代码示例。

1. bind 钩子函数

  • 作用bind 钩子函数会在指令第一次绑定到元素上时调用,而且只调用一次。这时候你可以做一些初始化的操作,比如设置一些默认值、添加事件监听器之类的。
  • 使用场景:当你需要在指令绑定到元素时就进行一些初始化操作,就可以用 bind 钩子函数。
// 自定义一个名为 'focus' 的指令
Vue.directive('focus', {// bind 钩子函数,在指令第一次绑定到元素时调用bind: function (el) {// 给元素添加一个自定义属性,用于标记这个元素被绑定了 focus 指令el.setAttribute('data-focus', 'true');// 打印一条消息,提示指令已经绑定到元素上console.log('指令已绑定到元素上');}
});// 创建一个 Vue 实例
new Vue({el: '#app',template: '<input v-focus>'
});

2. inserted 钩子函数

  • 作用inserted 钩子函数会在绑定元素被插入到父节点时调用。注意,这里的父节点必须是存在于 DOM 中的。
  • 使用场景:当你需要在元素插入到 DOM 后做一些操作,比如自动聚焦、添加动画效果等,就可以用 inserted 钩子函数。
// 自定义一个名为 'focus' 的指令
Vue.directive('focus', {// inserted 钩子函数,在绑定元素被插入到父节点时调用inserted: function (el) {// 让元素自动获得焦点el.focus();// 打印一条消息,提示元素已经插入到 DOM 中console.log('元素已插入到 DOM 中');}
});// 创建一个 Vue 实例
new Vue({el: '#app',template: '<input v-focus>'
});

3. update 钩子函数

  • 作用update 钩子函数会在包含组件的 VNode 更新时调用,但可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。
  • 使用场景:当你需要在组件更新时对指令绑定的元素做一些操作,就可以用 update 钩子函数。
// 自定义一个名为 'highlight' 的指令
Vue.directive('highlight', {// update 钩子函数,在包含组件的 VNode 更新时调用update: function (el, binding) {// 获取指令的值const color = binding.value;// 设置元素的背景颜色为指令的值el.style.backgroundColor = color;// 打印一条消息,提示元素的背景颜色已更新console.log('元素的背景颜色已更新');}
});// 创建一个 Vue 实例
new Vue({el: '#app',data: {// 定义一个变量,用于存储背景颜色highlightColor: 'yellow'},template: '<div v-highlight="highlightColor">这是一个高亮的 div</div>'
});

4. componentUpdated 钩子函数

  • 作用componentUpdated 钩子函数会在包含组件的 VNode 及其子 VNode 全部更新后调用。
  • 使用场景:当你需要在组件和其子组件都更新完成后对指令绑定的元素做一些操作,就可以用 componentUpdated 钩子函数。
// 自定义一个名为 'highlight' 的指令
Vue.directive('highlight', {// componentUpdated 钩子函数,在包含组件的 VNode 及其子 VNode 全部更新后调用componentUpdated: function (el, binding) {// 获取指令的值const color = binding.value;// 设置元素的背景颜色为指令的值el.style.backgroundColor = color;// 打印一条消息,提示元素的背景颜色已在组件更新后更新console.log('元素的背景颜色已在组件更新后更新');}
});// 创建一个 Vue 实例
new Vue({el: '#app',data: {// 定义一个变量,用于存储背景颜色highlightColor: 'yellow'},template: '<div v-highlight="highlightColor">这是一个高亮的 div</div>'
});

5. unbind 钩子函数

  • 作用unbind 钩子函数会在指令与元素解绑时调用,而且只调用一次。这时候你可以做一些清理工作,比如移除事件监听器。
  • 使用场景:当你需要在指令与元素解绑时做一些清理工作,就可以用 unbind 钩子函数。
// 自定义一个名为 'click-outside' 的指令
Vue.directive('click-outside', {// bind 钩子函数,在指令第一次绑定到元素时调用bind: function (el, binding, vnode) {// 定义一个点击事件处理函数el.clickOutsideEvent = function (event) {// 判断点击事件是否发生在元素外部if (!(el === event.target || el.contains(event.target))) {// 如果点击事件发生在元素外部,调用指令绑定的方法vnode.context[binding.expression](event);}};// 给 document 添加点击事件监听器document.addEventListener('click', el.clickOutsideEvent);},// unbind 钩子函数,在指令与元素解绑时调用unbind: function (el) {// 移除 document 上的点击事件监听器document.removeEventListener('click', el.clickOutsideEvent);// 删除元素上的点击事件处理函数delete el.clickOutsideEvent;// 打印一条消息,提示指令已与元素解绑console.log('指令已与元素解绑');}
});// 创建一个 Vue 实例
new Vue({el: '#app',methods: {// 定义一个方法,用于处理点击元素外部的事件handleClickOutside: function () {console.log('点击了元素外部');}},template: '<div v-click-outside="handleClickOutside">点击这个 div 外部试试</div>'
});

这些钩子函数能让你在不同的阶段对指令绑定的元素进行操作,大大增强了 Vue 指令的灵活性。你可以根据具体的需求选择合适的钩子函数来使用。

相关文章:

Vue 中directive的钩子函数(bind、inserted 等)的作用及使用场景

大白话Vue 中directive的钩子函数&#xff08;bind、inserted 等&#xff09;的作用及使用场景。 在 Vue 里&#xff0c;指令&#xff08;directive&#xff09;是个超实用的东西&#xff0c;它能让你在不改动组件逻辑的情况下&#xff0c;给 HTML 元素添加一些特殊的行为。Vu…...

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree&#xff08;默克尔树&#xff09;1.4 HMAC&#xff08;哈希消息认证码&#xff09; 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC&#xff08;椭圆曲线密码学&#xff09;2.4 Diffie-He…...

Linux安装MySQL数据库并使用C语言进行数据库开发

目录 一、前言 二、安装VMware运行Ubuntu 1.安装VMware 2.使用VMware打开Ubuntu 三、配置VMware使用网卡 1.添加NAT网卡 四、Linux下安装MySQL数据库 五、安装MySQL开发库 六、演示代码 sql_connect.c sql_connect.h main.c中数据库相关代码 结尾 一、前言 由于最…...

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现&#xff1a; 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖小区编号进行合理配置&#xff0c;以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…...

伯努利分布和二项分布学习笔记

目录 1. 伯努利分布1.1定义1.2概率质量函数1.3数学期望与方差1.4应用示例 2. 二项分布2.1定义2.1概率质量函数2.2数学期望与方差2.3性质与图形 3. 伯努利分布与二项分布的关系4. 总结 1. 伯努利分布 伯努利分布&#xff08;Bernoulli Distribution&#xff09;&#xff0c;又称…...

Redis实战常用二、缓存的使用

一、什么是缓存 在实际开发中,系统需要"避震器"&#xff0c;防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪. 这在实际开发中对企业讲,对产品口碑,用户评价都是致命的。所以企业非常重视缓存技术; 缓存(Cache)&#xff1a;就是数据交换的缓冲区&…...

G口服务器和普通服务器之间的区别

今天小编主要来为大家介绍一下G口服务器和普通服务器之间的区别&#xff01; 首先&#xff0c;从硬件配置上看&#xff0c;普通服务器通常都会配备中央处理器、内存和硬盘等基本的硬件配置&#xff0c;能够适用于各种应用程序和服务&#xff1b;G口服务器除了基础的硬件配置还增…...

通过国内源在Ubuntu20.0.4安装repo

国内三大免费源&#xff1a; 清华大学&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror中国科技大学&#xff1a;USTC Open Source Software Mirror阿里云&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 repo只在清华源网站里搜到&#xff1a;…...

多维动态规划 力扣hot100热门面试算法题 面试基础 核心思路 背题

多维动态规划 不同路径 https://leetcode.cn/problems/unique-paths/ 核心思路 比较简单 f[i][j] f[i - 1][j] f[i][j - 1] ; 示例代码 class Solution {public int uniquePaths(int n, int m) {int[][] f new int[n][m];for (int i 0; i < n; i)f[i][0] 1;for…...

《Java到Go的平滑转型指南》

文章目录 **文章摘要****核心主题****关键内容提炼****决策者行动清单****核心结论** **第一章&#xff1a;转型决策&#xff1a;为什么要从Java转向Go&#xff1f;****1.1 性能对比&#xff1a;GC机制与并发模型差异****GC机制对比****并发模型基准测试** **1.2 开发效率&…...

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…...

SpringMVC 请求处理

SpringMVC 请求处理深度解析&#xff1a;从原理到企业级应用实践 一、架构演进与核心组件协同 1.1 从传统Servlet到前端控制器模式 SpringMVC采用前端控制器架构模式&#xff0c;通过DispatcherServlet统一处理请求&#xff0c;相比传统Servlet的分散处理方式&#xff0c;实…...

unittest自动化测试实战

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程…...

leetcode3.无重复字符的最长字串

采用滑动窗口方法 class Solution { public:int lengthOfLongestSubstring(string s) {int ns.size();if(n0)return 0;int result0;unordered_set<char> set;set.insert(s[0]);for(int i0,j0;i<n;i){while(j1<n&&set.find(s[j1])set.end()){set.insert(s[…...

Android Compose 框架派生状态(derivedStateOf、rememberCoroutineScope)深入剖析(十五)

一、引言 在 Android 开发领域&#xff0c;高效的状态管理对于构建响应式、高性能的应用程序至关重要&#xff0c;在 Jetpack Compose 中&#xff0c;derivedStateOf 和 rememberCoroutineScope 这两个与派生状态相关的特性在状态管理方面发挥着关键作用。派生状态允许我们根据…...

3.25-2request库

request库 一、介绍request库 &#xff08;1&#xff09;requests是用python语言编写的简单易用的http库&#xff0c;用来做接口测试的库&#xff1b; &#xff08;2&#xff09;接口测试自动化库有哪些&#xff1f; requests、urllib 、urllib2、urllib3、 httplib 等&…...

《破解老龄化的智能密钥:机器人四维战略与未来养老生态》

一、引言&#xff1a;老龄化社会与智能机器人的必然性 全球老龄化趋势与老年人核心需求&#xff08;健康管理、生活辅助、心理陪伴、安全保障&#xff09; 全球正面临着严峻的老龄化挑战。根据联合国发布的数据&#xff0c;全球60岁及以上人口数量在过去几十年中持续增长&…...

Docker-Volume数据卷详讲

Docker数据卷-Volume 一&#xff1a;Volume是什么&#xff0c;用来做什么的 当删除docker容器时&#xff0c;容器内部的文件就会跟随容器所销毁&#xff0c;在生产环境中我们需要将数据持久化保存&#xff0c;就催生了将容器内部的数据保存在宿主机的需求&#xff0c;volume …...

SpringMVC 配置

一、MVC 模式简介 在软件开发的广袤天地中&#xff0c;MVC 模式宛如一座明亮的灯塔&#xff0c;指引着开发者构建高效、可维护的应用程序。Spring MVC 作为基于 Spring 框架的重要 web 开发模块&#xff0c;更是将 MVC 模式的优势发挥得淋漓尽致&#xff0c;堪称 Servlet 的强…...

Python 3.8 Requests 爬虫教程(2025最新版)

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私&#xff01; 一、环境配置与基础验证 # 验证 Python 版本&#xff08;需 ≥3.8&#xff09; import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库&#xff08;若未安装&#xff09; # 命令行执…...

蓝桥杯备考之 最长上升子序列问题(挖地雷)

这道题其实就是正常的最长上升子序列问题&#xff0c;但是我们还要把最优方案输出出来&#xff0c;我们可以用个pre数组来维护就行了&#xff0c;每当我们更新以i为结尾的最长子序列&#xff0c;如果i是接在1到i-1某个点后面的话就把前面的点存到pre里面 最后我们把pre倒着打印…...

华为OD机试2025A卷 - 游戏分组/王者荣耀(Java Python JS C++ C )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 2020年题: 英雄联盟是一款十分火热的对战类游戏。每一场对战有10位玩家参与,分为两组,每组5人。每位玩家都有一个战斗力,代表着这位玩家的厉害程度。为了对战尽可能精彩,我们需要…...

【Python Cookbook】字符串和文本(二)

字符串和文本&#xff08;二&#xff09; 6.字符串忽略大小写的搜索替换7.最短匹配模式8.多行匹配模式9.将 Unicode 文本标准化10.在正则式中使用 Unicode 6.字符串忽略大小写的搜索替换 你需要以忽略大小写的方式搜索与替换文本字符串。 为了在文本操作时忽略大小写&#xf…...

Redisson 实现分布式锁简单解析

目录 Redisson 实现分布式锁业务方法&#xff1a;加锁逻辑LockUtil 工具类锁余额方法&#xff1a;工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法&#xff1a; 如图&#xff0c;简单…...

六十天Linux从0到项目搭建(第五天)(file、bash 和 shell 的区别、目录权限、默认权限umask、粘滞位、使用系统自带的包管理工具)

1. file [选项] 文件名 用于确定文件类型的实用工具。它会通过分析文件内容&#xff08;而不仅仅是文件扩展名&#xff09;来判断文件的实际类型 示例输出解析 $ file /bin/bash /bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, i…...

信源的分类及数学模型

信源的分类及数学模型 按照信源发出的时间和消息分布分为离散信源和连续信源 按照信源发出符号之间的关系分为无记忆信源和有记忆信源 单符号离散信源&#xff08;一维离散信源&#xff09; 信源输出的消息数有限或可数&#xff0c;且每次只输出符号集的一个消息 样本空间&…...

嵌入式硬件工程师从小白到入门-PCB绘制(二)

PCB绘制从小白到入门&#xff1a;知识点速通与面试指南 一、PCB设计核心流程 需求分析 明确电路功能&#xff08;如电源、信号处理、通信&#xff09;。确定关键参数&#xff08;电压、电流、频率、接口类型&#xff09;。 原理图设计 元器件选型&#xff1a;匹配封装、电压、…...

抽象工厂设计模式及应用案例

引言 在软件开发中&#xff0c;合理的设计模式可以有效地提高代码的可维护性、可扩展性和可重用性。抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;便是一个重要的创建型设计模式&#xff0c;它允许我们在不指定具体类的情况下&#xff0c;创建一系列相关或相…...

LVS NAT模式实现三台RS的轮询访问

节点规划: 配置RS&#xff1a; RS1-RS3的网关配置均为 192.168.163.8 配置RS1&#xff1a; [rootlocalhost ~]# hostnamectl hostname rs1 [rootlocalhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.163.7/24 ipv4.gateway 192.168.163.8 conne…...

LSM-Tree(Log-Structured Merge-Tree)详解

1. 什么是 LSM-Tree? LSM-Tree(Log-Structured Merge-Tree)是一种 针对写优化的存储结构,广泛用于 NoSQL 数据库(如 LevelDB、RocksDB、HBase、Cassandra)等系统。 它的核心思想是: 写入时只追加写(Append-Only),将数据先写入内存缓冲区(MemTable)。内存数据满后…...