「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.pswp.cn/news/713555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713555.shtml
英文地址,請注明出處:http://en.pswp.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;但是報一個出錯…