「Vue3系列」Vue3指令

文章目录

  • 一、Vue3 指令
  • 二、注册-自定义指令
  • 三、常见自定义指令
    • 1. 聚焦指令(v-focus)
    • 2. 高亮指令(v-highlight)
    • 3. 防抖指令(v-debounce)
    • 4. 限制输入指令(v-limit)
    • 使用注意事项
  • 四、相关链接

一、Vue3 指令

Vue 3 指令是 Vue 模板中用于与 DOM 进行交互的特殊属性。指令以 v- 为前缀,后面跟着指令名称。Vue 3 提供了一系列内置指令,同时你也可以创建自定义指令。下面是一些 Vue 3 中常用的内置指令:

  1. v-bind
    用于属性绑定,将表达式的结果绑定到一个元素的属性上。
<img v-bind:src="imageSrc" alt="Vue logo">

简写形式为 :

<img :src="imageSrc" alt="Vue logo">
  1. v-model
    用于在表单元素上创建双向数据绑定。
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
  1. v-on
    用于监听 DOM 事件,并在触发时执行一些 JavaScript 代码。
<button v-on:click="increment">Increment</button>

简写形式为 @

<button @click="increment">Increment</button>
  1. v-ifv-else-ifv-else
    用于条件渲染。根据表达式的值来决定是否渲染一个元素。
<div v-if="type === 'A'">Render A
</div>
<div v-else-if="type === 'B'">Render B
</div>
<div v-else>Render Others
</div>
  1. v-for
    用于列表渲染。基于源数据多次渲染一个元素或模板块。
<div v-for="item in items" :key="item.id">{{ item.text }}
</div>
  1. v-show
    根据表达式的值的真假,切换元素的 display CSS 属性。
<p v-show="isVisible">Hello when visible</p>
  1. v-pre
    跳过这个元素和它的子元素的编译过程。可以用来显示原始的 Mustache 标签。
<div v-pre>{{ this will not be compiled }}
</div>
  1. v-cloak
    这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
<div v-cloak>{{ message }}
</div>
[v-cloak] {display: none;
}
  1. v-once
    将元素和组件标记为只渲染一次。
<span v-once>This will only be rendered once.</span>
  1. v-text
    更新元素的 textContent
<span v-text="message"></span>
  1. v-html
    更新元素的 innerHTML
<div v-html="htmlContent"></div>

除了这些内置指令,Vue 3 还允许你注册自定义指令。自定义指令可以扩展 Vue 的基本功能,用于执行复杂的 DOM 操作或处理特定的业务逻辑。

二、注册-自定义指令

注册自定义指令有两种方式:全局注册和局部注册。全局注册的指令可以在任何 Vue 实例中使用,而局部注册的指令只能在特定的 Vue 实例或组件中使用。

注册自定义指令的基本语法如下:

// 全局注册
Vue.directive('focus', {// 当被绑定的元素插入到 DOM 中时……inserted: function (el) {// 聚焦元素el.focus()}
})// 局部注册
const app = Vue.createApp({})app.directive('focus', {// 定义指令
})app.mount('#app')

三、常见自定义指令

在 Vue 3 中,自定义指令允许你注册一些可以在模板中重复使用的行为。这些行为可以附加到任何元素上,并在元素的特定生命周期钩子中执行自定义逻辑。以下是一些 Vue 3 中常见的自定义指令及其案例代码:

1. 聚焦指令(v-focus)

当页面加载时,自动将焦点聚焦到指定的元素上。

// 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')
<!-- App.vue -->
<template><div><input v-focus type="text" placeholder="自动聚焦到这个输入框"></div>
</template>

2. 高亮指令(v-highlight)

将匹配的文本在元素中进行高亮显示。

// main.js 或其他初始化文件
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 全局注册自定义指令 v-highlight
app.directive('highlight', {beforeMount(el, binding) {el.innerHTML = el.innerHTML.replace(new RegExp(binding.value, 'gi'), function(matched) {return `<span style="background-color: yellow;">${matched}</span>`})}
})app.mount('#app')
<!-- App.vue -->
<template><div><p v-highlight="'vue'">在这里,'vue' 会被高亮显示。</p></div>
</template>

3. 防抖指令(v-debounce)

对事件处理函数进行防抖处理,减少不必要的计算或请求。

// main.js 或其他初始化文件
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 全局注册自定义指令 v-debounce
app.directive('debounce', {beforeMount(el, binding) {let timer = nullel.addEventListener('input', function() {clearTimeout(timer)timer = setTimeout(() => {binding.value()}, binding.arg || 500)})}
})app.mount('#app')
<!-- App.vue -->
<template><div><input v-debounce="search" type="text" placeholder="防抖处理,输入后延迟500ms执行"></div>
</template><script>
export default {methods: {search() {console.log('执行搜索')}}
}
</script>

4. 限制输入指令(v-limit)

限制输入框中字符的数量。

// main.js 或其他初始化文件
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 全局注册自定义指令 v-limit
app.directive('limit', {mounted(el, binding) {el.addEventListener('input', function() {if (el.value.length > binding.value) {el.value = el.value.slice(0, binding.value)}})}
})app.mount('#app')
<!-- App.vue -->
<template><div><input v-limit="10" type="text" placeholder="最多输入10个字符"></div>
</template>

使用注意事项

  • 在使用自定义指令时,要确保指令名称不与 Vue 的内置指令名称冲突。
  • 在自定义指令的钩子函数中,el 参数是绑定指令的元素,binding 参数是一个对象,包含了一些有用的属性,如 name(指令名)、value(指令的绑定值)、oldValue(指令绑定的前一个值)、arg(指令的参数)、modifiers(包含修饰符的对象)。
  • 如果需要监听多个事件或进行更复杂的 DOM 操作,可以考虑

四、相关链接

  1. Vue3官方地址
  2. Vue3中文文档
  3. 「Vue3系列」Vue3简介及安装
  4. 「Vue3系列」Vue3起步/创建项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/713555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF中如何设置自定义控件

1.圆角按钮的设置&#xff1a; 众所周知在WPF中自带有提示信息&#xff0c;当我问创建Button时&#xff0c;点击空格出现如下可选设置 带有小扳手&#x1f527;图标为相应的属性&#xff0c;如果Button有CornerRadius&#xff08;角半径&#xff09;属性就能够直接设置Button实…

33. 【Linux教程】Linux 用户组

前面小节介绍了 Linux 用户相关的增删改查&#xff0c;本小节介绍 Linux 用户组&#xff0c;Linux 系统中采取了一种安全机制&#xff08;即用户组&#xff09;&#xff0c;用户组可以允许多个 Linux 用户共享同一种权限。 1. 用户组介绍 Linux 是多任务多用户的操作系统&…

鸿蒙Harmony应用开发—ArkTS声明式开发(自定义事件分发)

ArkUI在处理触屏事件时&#xff0c;会在触屏事件触发前进行按压点和组件区域的触摸测试&#xff0c;来收集需要响应触屏事件的组件&#xff0c;再基于触摸测试结果分发相应的触屏事件。在父节点&#xff0c;开发者可以通过onChildTouchTest决定如何让子节点去做触摸测试&#x…

【AI Agent系列】【MetaGPT多智能体学习】5. 多智能体案例拆解 - 基于MetaGPT的智能体辩论(附完整代码)

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第三篇笔记。主要是对课程刚开始环境搭…

Linux系统——Shell脚本——一键安装LNMP

#!/bin/bash #安装nginx echo "安装nginx服务" wget http://nginx.org/download/nginx-1.11.4.tar.gz &>/dev/null if [ $? -eq 0 ] thenecho "nginx-1.11.4安装包下载完成"echo "--开始安装必要的依赖文件--"yum install -y gcc gcc-c…

python中map函数

map(str, path)&#xff1a; map函数会将path中的每一个元素传递给str函数&#xff0c;从而将它们转换为字符串。 如果path是一个数字列表&#xff0c;例如[1, 2, 3]&#xff0c;那么map(str, path)将返回[1, 2, 3]。 在写二叉树时用到map给树节点进行str转换是错的。 map(s…

xsslabs第五关

看一下源码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff01…

MATLAB知识点:条件判断 if-elseif-else-end语句

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 if、elseif、…

webstorm 创建运行纯Typescript项目

创建一个空项目&#xff0c;在项目根目录创建一个tsconfig.json文件自动配置&#xff1a; 打开终端输入tsc --init&#xff0c;即可自动生成tsconfig.json文件手动配置&#xff1a; 在项目根目录下新建一个tsconfig.json文件,并配置如下内容 具体配置可以直接使用下面的配置&am…

【JavaEE】_Spring MVC项目之建立连接

目录 1. Spring MVC程序编写流程 2. 建立连接 2.1 RequestMapping注解介绍 2.2 RequestMapping注解使用 2.2.1 仅修饰方法 2.2.2 修饰类与方法 2.3 关于POST请求与GET请求 2.3.1 GET请求 2.3.2 POST请求 2.3.3 限制请求方法 1. Spring MVC程序编写流程 1. 建立连接&…

如何开好一家汽车美容店,汽车美容保养与装饰教学

一、教程描述 本套教程共由17张VCD组合而成&#xff0c;教程内容主要包括&#xff1a;美容店的设立和管理&#xff0c;汽车系统与内部结构&#xff0c;汽车美容工具与美容设备&#xff0c;美容用品的选择与使用&#xff0c;车身打蜡镀膜与内外清洁&#xff0c;车身抛光与漆面处…

Debezium发布历史162

原文地址&#xff1a; https://debezium.io/blog/2023/09/22/debezium-2-4-cr1-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 2.4.0.CR1 Released September 22, 2023 by Chris Cranford r…

(介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)

前言 本文详细介绍了如何利用物联网技术,通过NodeMCU ESP8266(ESP-12F)模块连接到新版的OneNet平台,使用MQTT协议实现数据的上传与指令的下发。文中首先对NodeMCU ESP8266模块及其特性进行了简介,随后详细阐述了如何配置和使用MQTT协议连接到OneNet平台,实现温湿度数据的…

Azkaban 大数据 任务调度

参考视频&#xff1a;尚硅谷大数据Azkaban 3.x教程&#xff08;全新发布&#xff09;_哔哩哔哩_bilibili Azkaban&#xff1a; 是一个定时、批量工作流任务调度器(工作流程调度&#xff0c;定时调度) 常见的开源调度系统&#xff1a; 简单单一的任务调度&#xff1a; Linux的…

嵌入式驱动学习第一周——Linux错误码以及 IS_ERR、ERR_PTR、PTR_ERR

前言 本节来学习Linux错误码&#xff0c;因为内核中的函数常常返回指针&#xff0c;如果出错&#xff0c;也希望能够通过返回的指针体现出来。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博…

【正点原子STM32】RNG硬件随机数(随机数发生器、真随机和伪随机、应用场景、RNG结构和原理、RNG相关寄存器和HAL库驱动、RNG基本驱动步骤)

一、RNG简介 二、RNG框图介绍 三、RNG相关寄存器介绍 四、RNG相关HAL库驱动介绍 五、RNG基本驱动步骤 六、编程实战 七、总结 一、RNG简介 随机数发生器&#xff08;RNG&#xff09;在计算机科学和密码学中具有广泛的应用场景&#xff0c;包括但不限于以下几个方面&#xff1a…

QML中动态表格修改数据

1.qml文件中的实现代码 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_model…

Python内置函数11——globals()、locals()

文章目录 概要基础用法 概要 globals()和locals()都是内置函数&#xff0c;用于获取当前命名空间中的变量。 globals()函数返回全局命名空间的字典&#xff0c;包括全局变量、函数和模块。它返回一个表示全局命名空间的字典。你可以使用该函数来查看和修改全局命名空间中的变量…

深入剖析k8s-控制器思想

引言 本文是《深入剖析Kubernetes》学习笔记——《深入剖析Kubernetes》 正文 控制器都遵循K8s的项目中一个通用的编排模式——控制循环 for {实际状态 : 获取集群中对象X的实际状态期望状态 : 获取集群中对象X的期望状态if 实际状态 期望状态 {// do nothing} else {执行…

buuctf misc做题笔记

喵喵喵 使用stegsolve.jar&#xff0c;按BGR顺序提取出一个png图片&#xff0c;是一个一半得二维码&#xff0c;修改图片高度后&#xff0c;解析出一个百度网盘地址&#xff0c;https://pan.baidu.com/s/1pLT2J4f 下载得到压缩包flag.rar。解压成功&#xff0c;但是报一个出错…