【Vue】自定義指令

自定義指令

自定義指令就是自己定義的指令,是對 DOM 元素進行底層操作封裝 ,程序化地控制 DOM,拓展額外的功能

全局定義

Vue.directive(指令名字, definition)

  • 指令名:不包括v-前綴,使用時候包括v-,v-指令名
  • definition: 對象,包含指令邏輯
// definition 就代表下面的函數,
Vue.directive('focus', function(el, binding) {// el 是綁定的 DOM 元素
})

局部定義

new Vue({directives: {'focus': {}}
})directives: {
// 直接寫成函數形式,部分細節問題會處理不了focus(el, binding) {}  
}

指令definition對象可以訪問以下參數:

  • el: 指令綁定的DOM元素,可以直接操作
  • binding: 對象,包含指令信息
    • name: 指令名
    • value: 指令綁定的值
    • expression: 綁定表達式字符串
    • arg: 參數
    • modifiers: 修飾符
  • vnode: Vue編譯的虛擬節點
  • oldVnode: 之前的虛擬節點

示例1

創建一個自定義指令

 <p v-color>鼠標懸停我,我會變色!</p>

在這里,v-color 就是我們的自定義指令它的名字是由我們來決定的,這個名字后面我們會用到

創建自定義指令的邏輯

<script>directives: {// 寫成對象形式,可以定義更多函數color: {bind(el,binding) {console.log(el)console.log(binding)el.addEventListener('mouseover', () => {el.style.color = 'red'; // 鼠標懸停時變紅色});el.addEventListener('mouseout', () => {el.style.color = ''; // 鼠標移出恢復原色});}}
}
</script>

bind 鉤子函數和其他一些鉤子函數中,el 是HTMLElement真實DOM元素一個必傳參數,表示綁定了指令的 DOM 元素我們可以通過操作 el 來修改元素的樣式、屬性等

binding 是一個包含了指令相關信息的對象

我們告訴Vue當使用 v-color 指令時,應該執行的邏輯是:當鼠標懸停在元素上時,把文字變成紅色;當鼠標移出時,恢復原來的顏色

我們已經在模板中使用了自定義指令 v--color,Vue會自動找到這個指令,并且執行我們之前定義的邏輯

鼠標懸停變色

el就代表綁定的元素,這里綁定的是h1

image-20230827183910809

value是什么?

當我給v-color制定值的時候,它就出現了,所以binding.value就是我們綁定的value

image-20230827184646143

image-20230827184604525

image-20230827185002751

示例2

<button @click="n++">點我n+1</button>
// 如果指令名有多個字母組成,要求使用烤肉串方式,如:v-focus-bind,相應的key應該加上引號
<input type="text" v-fbind:value="n">directives: {//函數是在 1.指令第一次綁定到元素時觸發2.指令所在的模板被重新解析時觸發// fbind(element,binding){// },// 寫成對象形式,對象中可以定義更多函數,也可以寫更多細節fbind:{//指令與元素成功綁定時,一上來立即會被調用,和函數形式調用時機一樣fbind(){}bind(el,binding){el.value = binding.value},//指令所在元素被插入頁面時inserted(el,binding){el.focus()},//指令所在的模板被重新解析時update(el,binding){el.value = binding.value}}}

全局形式

 Vue.directive('fbind',{bind(element,binding){element.value = binding.value},inserted(element,binding){element.focus()},update(element,binding){element.value = binding.value}

image-20230827195833643

定義成函數形式,相當于對象中的bind和update,沒有inserted的簡寫,如需要更多細節操作可以定義對象形式

拓展鉤子函數

Vue 自定義指令的常見鉤子函數包括:

  • bind: 指令第一次綁定到元素時觸發
  • inserted: 元素被插入到父元素時觸發
  • update: 指令所在的模板被重新解析時觸發
  • componentUpdated: 組件更新完成時觸發
  • unbind: 指令與元素解綁時觸發

這些鉤子函數名稱是 Vue 所識別的,如果我們在自定義指令中使用這些名稱,Vue 就會在相應的時機調用我們的指令邏輯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合&#xff0c;用于在 CUDA 內的所有級別和規模上實現高性能矩陣-矩陣乘法 (GEMM) 和相關計算。它采用了類似于 cuBLAS 和 cuDNN 中實現的分層分解和數據移動策略。 CUTLASS 最新版本為3.3&#xff0c;相比1.3.3變動較大。然而重溫一下1.3.3仍然…

生產問題 Recv-Q101

生產上服務端口 Recv-Q101 新請求到服務器的失敗&#xff0c;幸好及時發現&#xff0c;通過重啟服務之后得到解決&#xff0c;具體原因等待排查 目前覺得的原因是&#xff1a;某些請求暫用時間比較久

Linux超簡單部署個人博客

1 安裝halo 1.1 切換到超級用戶 sudo -i 1.2 新建halo文件夾 mkdir ~/halo && cd ~/halo 1.3 編輯docker-compose.yml文件 vim ~/halo/docker-compose.yml 英文輸入法下&#xff0c;按 i version: "3"services:halo:image: halohub/halo:2.10container_…

2017年全國碩士研究生入學統一考試管理類專業學位聯考數學試題——解析版

文章目錄 2017 級考研管理類聯考數學真題解析一、問題求解&#xff08;本大題共 5 小題&#xff0c;每小題 3 分&#xff0c;共 45 分&#xff09;下列每題給出 5 個選項中&#xff0c;只有一個是符合要求的&#xff0c;請在答題卡上將所選擇的字母涂黑。真題&#xff08;2017-…

Python 提高篇學習筆記(一):深拷貝和淺拷貝

文章目錄 一、什么是對象的引用二、深拷貝和淺拷貝2.1 淺拷貝(Shallow Copy)2.2 深拷貝(Deep Copy)2.3 copy.copy和copy.deepcopy的區別 一、什么是對象的引用 在 Python 中&#xff0c;對象的引用是指變量指向內存中某個對象的地址或標識符。當你創建一個新的對象(比如一個整…

[技術雜談]計算機系統硬件類名稱

在各種編程語言都可以見到利用WMI查詢計算機硬件信息&#xff0c;因此知道有哪些計算機硬件名稱非常有必要&#xff0c;下面列舉了所有計算機硬件名稱可以查詢。 本文內容 冷卻設備類輸入設備類大容量存儲類主板、控制器和端口類 顯示另外 6 個 計算機系統硬件類別將表示硬…

git修改遠程分支名稱

先拉取old_branch最新代碼到本地 git checkout old_branchgit pull origin old_branch本地修改后并推送 git branch -m old_branch new_branch # 修改分支名稱git push --delete origin old_branch # 刪除在遠程的老分支推送新分支 git push origin new_branch本地分支與遠…

除自身以外數組的乘積[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你一個整數數組nums&#xff0c;返回數組answer&#xff0c;其中answer[i]等于nums中除nums[i]之外其余各元素的乘積。題目數據保證數組nums之中任意元素的全部前綴元素和后綴的乘積都在32位整數范圍內。請不要使用除法&#xff0…

【Qt開發流程】之富文本處理

描述 Scribe框架提供了一組類&#xff0c;用于讀取和操作結構化的富文本文檔。與Qt中以前的富文本支持不同&#xff0c;新的類集中在QTextDocument類上&#xff0c;而不是原始文本信息。這使開發者能夠創建和修改結構化的富文本文檔&#xff0c;而不必準備中間標記格式的內容。…

【數據結構】A : A DS圖_傳遞信息

A : A DS圖_傳遞信息 Description 小明在和他的小伙伴們玩傳消息游戲&#xff0c;游戲規則如下&#xff1a; 有n名玩家&#xff0c;所有玩家編號分別為0~n-1&#xff0c;其中小明編號為0&#xff1b;每個玩家都有固定的若干個可傳信息的其他玩家(也可能沒有)。傳消息的關系是…

busybox制作根文件系統2

上篇內容使用busybox制作好了根文件系統&#xff0c;接下來需要進行一些測試和功能的完善&#xff01; 根文件系統的測試 測試根文件系統的時候不是直接燒寫到EMMC里面&#xff0c;這樣測試效率太低了&#xff0c;Ubuntu的rootfs目錄已經保存了根文件系統&#xff0c;只需要在…

向量數據庫,展望AGI時代

無論是向量數據庫&#xff0c;還是大模型&#xff0c;歸根結底&#xff0c;大家在追捧它時的心態&#xff0c;焦慮大于需求。 向量數據庫的熱潮&#xff0c;在一定程度上“外化”了人們的焦慮。 但這并不能否定向量數據庫的實際價值&#xff0c;甚至更長遠來看&#xff0c;向…

【C++】linux下的gdb程序調試

目錄 【C】Linux 下的 GDB 程序調試1. 安裝 GDB2. 編譯程序3. 啟動 GDB4. 設置斷點5. 執行程序6. 調試命令7. 調試崩潰8. 結束調試 【C】Linux 下的 GDB 程序調試 在開發 C 程序時&#xff0c;出現 bug 是常見的。調試是找出程序錯誤的關鍵步驟之一。在 Linux 環境下&#xff…

RedisTemplate使用詳解

RedisTemplate介紹StringRedisTemplate介紹RedisConnectionFactory介紹RedisConnectionFactory源碼解析 RedisOperations介紹RedisOperations源碼解析 RedisTemplate使用連接池配置RedisTemplate連接池連接池配置 RedisTemplate應用場景RedisTemplate主要特點RedisTemplate使用…

redis運維(十六) 有序集合

一 有序集合 把握一點&#xff1a; 各種redis 命令都提供各種語言對應的API 接口,后續API是關鍵 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合類型的一部分&#xff0c;所以它保留了集合中元素不能重復的特性3、但是不同的是,有序集合給每個元素多設置…

什么是數字孿生?

數字孿生是指通過數字化技術手段&#xff0c;將現實世界中的實體物理系統或過程與其數字化模型相連接&#xff0c;實現實體物理系統或過程的虛擬仿真、監測、預測和優化等功能的一種技術。數字孿生技術可以將物理系統的運行狀態、性能參數、故障信息等實時反饋到數字模型中&…

轉型做視頻了,博客就是稿子,繼續堅持寫博客,同時發布視頻,能寫博客說明思路清晰了,能再講明白,理解就更透徹了,緊跟上時代發展。

1&#xff0c;今天特別記錄下&#xff0c;B站給開通了《合集》功能 最近使用視頻制作了幾個視頻。播放量還不錯&#xff0c;最好的已經到了 2.6K了。 然后粉絲也漲到了 200個。 添加鏈接描述 緊跟時代&#xff1a;從寫博客到錄視頻&#xff0c;粉絲大漲&#xff0c;突破200個&…

vue開發一、在Vue中引入ElementUI二、在Vue中使用阿里圖標庫

目錄 一、在Vue中引入ElementUI1. 安裝ElementUI2. 引入ElementUI3. 使用ElementUI組件 二、在Vue中使用阿里圖標庫1. 在阿里圖標庫中選擇圖標2. 下載圖標3. 引入圖標4. 使用圖標 總結 一、在Vue中引入ElementUI ElementUI是一種基于Vue的第三方UI庫&#xff0c;提供了許多常用…

接口自動化測試 —— 工具、請求與響應

一、工具&#xff1a; 1.工具介紹 postman &#xff1a;很主流的API測試工具&#xff0c;也是工作里面使用最廣泛的研發工具。 JMeter&#xff1a; ApiPost&#xff1a; 2.安裝postman&#xff1a; 安裝好直接打開&#xff0c;不用注冊。 二、通信模式&#xff1a; 1、…

【Java 進階篇】從Java對象到JSON:Jackson的魔法之旅

在現代的軟件開發中&#xff0c;處理數據的能力是至關重要的。而當我們談及數據格式時&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;通常是首選。為了在Java中輕松地將對象轉換為JSON&#xff0c;我們需要一種強大而靈活的工具。這時&#xff0c;Jackso…