Vue 中自定义指令的探索与实践
文章目录
- 一、Vue 自定义指令简介
- 二、基本语法
- 三、指令的值
- 四、封装`v-loading`指令
- 五、总结
在 Vue 开发中,自定义指令为我们提供了一种强大的方式来操作 DOM 元素,实现特定的交互效果和功能增强。本文将深入探讨 Vue 中自定义指令的基本语法、指令的值的使用以及封装一个实用的v-loading指令。
一、Vue 自定义指令简介
Vue 允许开发者自定义指令,以实现对 DOM 元素的底层操作。自定义指令可以在普通的 HTML 标签上使用,就像内置指令(如v-if、v-for等)一样。它们可以在特定的场景下提供更加灵活的交互和视觉效果。
二、基本语法
在 Vue 中,自定义指令可以通过Vue.directive()方法或者在组件的directives选项中进行定义。
- 使用
Vue.directive()方法:
Vue.directive('my-directive', {bind(el, binding, vnode) {// 指令绑定到元素时调用},inserted(el, binding, vnode) {// 被绑定元素插入父节点时调用},update(el, binding, vnode, oldVnode) {// 所在组件的 VNode 更新时调用},componentUpdated(el, binding, vnode, oldVnode) {// 所在组件的 VNode 及其子 VNode 全部更新后调用},unbind(el, binding, vnode) {// 指令与元素解绑时调用}});
el:指令所绑定的元素。binding:一个对象,包含以下属性:value:指令的绑定值。oldValue:旧的绑定值。expression:指令的表达式。arg:指令的参数。modifiers:一个包含指令修饰符的对象。
vnode:Vue 编译生成的虚拟节点。oldVnode:上一个虚拟节点,仅在update和componentUpdated钩子中可用。
- 在组件中定义:
export default {directives: {'my-directive': {// 与上面相同的钩子函数}}}
三、指令的值
指令的值可以通过binding.value获取。这个值可以是任何数据类型,包括字符串、数字、对象、数组等。
例如,我们可以定义一个指令,根据传入的值来设置元素的颜色:
Vue.directive('color', {bind(el, binding) {el.style.color = binding.value;}
});
在模板中使用:
<div v-color="'red'">这是红色文本</div>
<div v-color="{ color: 'blue' }">这是蓝色文本</div>
四、封装v-loading指令
在实际开发中,经常会遇到需要显示加载状态的场景。我们可以封装一个v-loading指令来实现这个功能。
- 首先,定义指令:
Vue.directive('loading', {bind(el, binding) {if (binding.value) {// 创建一个加载遮罩元素const loadingElement = document.createElement('div');loadingElement.classList.add('loading-mask');el.appendChild(loadingElement);}},update(el, binding) {if (binding.value!== binding.oldValue) {if (binding.value) {const loadingElement = document.createElement('div');loadingElement.classList.add('loading-mask');el.appendChild(loadingElement);} else {const loadingElement = el.querySelector('.loading-mask');if (loadingElement) {loadingElement.remove();}}}},unbind(el) {const loadingElement = el.querySelector('.loading-mask');if (loadingElement) {loadingElement.remove();}}});
- 然后,在 CSS 中定义加载遮罩的样式:
.loading-mask {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(255, 255, 255, 0.5);display: flex;justify-content: center;align-items: center;}
- 在模板中使用:
<div v-loading="isLoading">加载中...</div>
在组件的data中定义isLoading变量,并在需要显示加载状态的时候将其设置为true,加载完成后设置为false。
五、总结
Vue 的自定义指令为我们提供了强大的 DOM 操作能力,可以根据具体的需求实现各种交互效果和功能增强。通过掌握自定义指令的基本语法、指令的值的使用以及封装实用的指令,我们可以更加高效地开发 Vue 应用程序。
在实际开发中,我们可以根据项目的需求封装更多的自定义指令,以提高开发效率和代码的可维护性。同时,也要注意指令的性能和可扩展性,避免过度复杂的指令导致性能问题。
相关文章:
Vue 中自定义指令的探索与实践
文章目录 一、Vue 自定义指令简介二、基本语法三、指令的值四、封装v-loading指令五、总结 在 Vue 开发中,自定义指令为我们提供了一种强大的方式来操作 DOM 元素,实现特定的交互效果和功能增强。本文将深入探讨 Vue 中自定义指令的基本语法、指令的值的…...
Vue3通过$emit实现子向父传递数据
引言 子组件通过$emit触发事件,并传递数据,父组件在使用子组件时就可以绑定子组件事件,在事件处理函数中拿到子组件传来的数据 子组件传递数据 函数声明:$emit(事件名, 传递的数据 . . .) 子组件传递的数据会依次传递给父组件的…...
代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度
226.翻转二叉树 翻转一棵二叉树。 思路: 在这里需要注意的是,在递归的时候唯独中序遍历是不可用的,这是因为先对左子树进行了反转,又对自身进行了反转,对自身反转后原本的左子树变成了右子树,如果此时又轮…...
Spark 任务与 Spark Streaming 任务的差异详解
Spark 任务与 Spark Streaming 任务的主要差异源自于两者的应用场景不同:Spark 主要处理静态的大数据集,而 Spark Streaming 处理的是实时流数据。这些差异体现在任务的调度、执行、容错、数据处理模式等方面。 接下来,我们将从底层原理和源…...
Git提示信息 Pulling is not possible because you have unmerged files.
git [fatal] hint: Pulling is not possible because you have unmerged files.hint: Fix them up in the … error: Pulling is not possible because you have unmerged files. 错误:无法提取,因为您有未合并的文件。 hint: Fix them up in the work tree, and t…...
python编程开发“人机猜拳”游戏
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
丹摩智算平台部署 Llama 3.1:实践与体验
文章目录 前言部署前的准备创建实例 部署与配置 Llama 3.1使用心得总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模…...
SpringCloud 2023各依赖版本选择、核心功能与组件、创建项目(注意事项、依赖)
目录 1. 各依赖版本选择2. 核心功能与组件3. 创建项目3.1 注意事项3.2 依赖 1. 各依赖版本选择 SpringCloud: 2023.0.1SpringBoot: 3.2.4。参考Spring Cloud Train Reference Documentation选择版本 SpringCloud Alibaba: 2023.0.1.0*: 参考Spring Cloud Alibaba选择版本。同时…...
串行化执行、并行化执行
文章目录 1、串行化执行2、并行化测试(多线程环境)3、任务的执行是异步的,但主程序的继续执行是同步的 可以将多个任务编排为并行和串行化执行。 也可以处理编排的多个任务的异常,也可以返回兜底数据。 1、串行化执行 顺序执行、…...
二叉搜索树(c++版)
前言 在前面我们介绍过二叉树这个数据结构,今天我们更进一步来介绍二叉树的一种在实现中运用的场景——二叉搜索树。二叉搜索树顾名思义其在“搜索”这个场景下有不俗的表现,之所以会这样是因为它在二叉树的基础上添加了一些属性。下面我们就来简单的介…...
每日1题-7
...
简单实现log记录保存到文本和数据库
简单保存记录到txt,sqlite数据库,以及console监控记录 using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Data.SQLite; using System.IO;namespace NlogFrame {public enum LogType{Tr…...
敏感字段加密 - 华为OD统一考试(E卷)
2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…...
go 安装三方库
go版本 go versiongo version go1.23.1 darwin/arm64安装 redis 库 cd $GOPATH说明: 这里可以改 GOPATH的值 将如下 export 语句写入 ~/.bash_profile 文件中 export GOPATH/Users/goproject然后使其生效 source ~/.bash_profile初始化生成 go.mod 文件 go mod…...
Java 中的 volatile和synchronized和 ReentrantLock区别讲解和案例示范
在 Java 的并发编程中,volatile、synchronized 和 ReentrantLock 是三种常用的同步机制。每种机制都有其独特的特性、优缺点和适用场景。理解它们之间的区别以及在何种情况下使用哪种机制,对提高程序的性能和可靠性至关重要。本文将详细探讨这三种机制的…...
从GDAL中 读取遥感影像的信息
从GDAL提供的实用程序来看,很多程序的后缀都是 .py ,这充分地说明了Python语言在GDAL的开发中得到了广泛的应用。 1. 打开已有的GeoTIF文件 下面我们试着读取一个GeoTiff文件的信息。第一步就是打开一个数据集。 >>> from osgeo import gdal…...
算法闭关修炼百题计划(一)
多看优秀的代码一定没有错,此篇博客属于个人学习记录 1.两数之和2.前k个高频元素3.只出现一次的数字4.数组的度5.最佳观光组合6.整数反转7.缺失的第一个正数8.字符串中最多数目的子序列9.k个一组翻转链表10.反转链表II11. 公司命名12.合并区间13.快速排序14.数字中的…...
vue3实现打字机的效果,可以换行
之前看了很多文章,效果是实现了,就是没有自动换行的效果,参考了文章写了一个,先上个效果图,卡顿是因为模仿了卡顿的效果,还是很丝滑的 目录 效果图:代码如下 效果图: 函数查找原因是FLASH Programming Sequence error(编程顺序错误),解决办法是在解锁后清零标志位…...
思考的快与慢:模型的“即时回答”与“深思熟虑”
上一篇文章我们学会了如何“使唤”模型:同步、异步、批量、流式,一通操作下来,你已经是调接口的好手了。但很快你可能会发现一个有意思的现象——同样是回答问题,有时候模型快到几乎零秒响应,有时候却要停顿好几秒甚至…...
5分钟彻底解决Windows软件DLL缺失问题:VisualCppRedist AIO完整修复方案
5分钟彻底解决Windows软件DLL缺失问题:VisualCppRedist AIO完整修复方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过新安装的软…...
Vulkan学习笔记
顺序很重要:#define 必须在 #include <GLFW/glfw3.h> 之前出现,否则不起作用。作用:当 GLFW 的头文件看到这个宏被定义后,它就会知道你需要 Vulkan 支持,并自动执行 #include <vulkan/vulkan.h>࿰…...
点云成像三维焊缝识别与机器人跟踪【附代码】
✨ 长期致力于点云成像、焊缝识别定位、机器人、点云拼接、焊缝轨迹跟踪研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)基于圆柱体拟合与ICP拼接的点云…...
AD19原理图编译总报off grid pin警告?手把手教你从库源头搞定封装与栅格对齐
AD19原理图编译报off grid pin警告?从库源头解决封装与栅格对齐问题 每次在AD19中编译原理图时,看到那一长串的"off grid pin"警告,是不是感觉特别烦躁?这些看似无害的警告实际上可能隐藏着严重的设计隐患。作为一位经历…...
详解51单片机智能小车避障核心:超声波、漫反射与红外传感器的实战选型与调试
1. 智能小车避障传感器的核心选择 做智能小车最让人头疼的就是避障功能了。我当年第一次做51单片机小车时,光选传感器就折腾了好几个星期。市面上常见的避障传感器主要有三种:超声波模块、漫反射光电管和红外传感器。每种传感器都有自己的脾气ÿ…...
Apache Airflow 系列教程 | 第28课:Backfill 与数据回填策略
导读(Introduction) 欢迎来到 Apache Airflow 源码深度解析系列的第二十八课。 在数据工程的日常工作中,“回填”(Backfill)是一个高频操作。当你修复了一个数据转换逻辑的 bug、新增了一个数据列的计算、或者需要重新处理因上游系统故障导致的历史缺失数据时,你需要让…...
别再只调API了!微信支付Native/JSAPI开发中,订单号生成与回调处理的5个实战避坑点
微信支付开发实战:订单与回调的五个关键陷阱与解决方案 在移动支付领域,微信支付作为主流平台之一,其开发文档看似详尽,但实际落地时仍存在诸多"暗坑"。许多开发者过度关注支付接口调用本身,却忽视了订单生成…...
Windows 11终极优化指南:一键清理系统臃肿,免费提升51%性能
Windows 11终极优化指南:一键清理系统臃肿,免费提升51%性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to …...
flux_down 下载工具使用步骤详解(附FluxDown多线程下载与磁力解析教程)
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
