網站首頁 Vue 正文
除了默認設置的核心指令 (v-model 和 v-show),Vue 也允許注冊自定義指令。
局部自定義指令(只針對組件內的元素)
父組件app.vue
<template> <div id="app"> <test-api></test-api> </div> </template> <script> import testApi from './components/testApi.vue' export default { data (){ return { } }, watch:{ }, methods:{ }, components:{ testApi } } </script> <style > </style>
子組件testApi.vue
<template> <div> <!-- 讓input元素在打開頁面的時候就獲得焦點 --> <input type="text" v-autoFocus > </div> </template> <script> export default { directives:{ // 自定義指令的名字 autoFocus:{ // 鉤子函數,被綁定元素插入父節點時調用 (父節點存在即可調用,不必存在于 document 中)。 inserted(el){ el.focus() console.log( 'inserted' ); }, // 只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個在綁定時執行一次的初始化動作。 bind(){ console.log( 'bind' ); }, // 所在組件的 VNode 更新時調用,但是可能發生在其孩子的 VNode 更新之前。 // 指令的值可能發生了改變也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 update(){ console.log( 'update' ); }, // 所在組件的 VNode 及其孩子的 VNode 全部更新時調用。 componentUpdated(){ console.log( 'componentUpdated' ); }, // 只調用一次,指令與元素解綁時調用。 unbind(){ console.log( 'unbind' ); } } }, data () { return { } }, props:[], methods:{ }, created(){ }, mounted(){ }, components:{ } } </script> <style scoped> </style>
效果圖:
定義全局自定義指令
在任意頁面的任意input里加上v-autoFcs
Vue.directive('autoFcs',{ // 鉤子函數,被綁定元素插入父節點時調用 (父節點存在即可調用,不必存在于 document 中)。 inserted(el){ el.focus() console.log( 'inserted' ); }, // 只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個在綁定時執行一次的初始化動作。 bind(){ console.log( 'bind' ); }, // 所在組件的 VNode 更新時調用,但是可能發生在其孩子的 VNode 更新之前。 // 指令的值可能發生了改變也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 update(){ console.log( 'update' ); }, // 所在組件的 VNode 及其孩子的 VNode 全部更新時調用。 componentUpdated(){ console.log( 'componentUpdated' ); }, // 只調用一次,指令與元素解綁時調用。 unbind(){ console.log( 'unbind' ); } })
效果圖:
自定義指令的鉤子函數
指令定義函數提供了幾個鉤子函數 (可選):
-
bind
:只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個在綁定時執行一次的初始化動作。 -
inserted
:被綁定元素插入父節點時調用 (父節點存在即可調用,不必存在于 document 中)。 -
update
:所在組件的 VNode 更新時調用,但是可能發生在其孩子的 VNode 更新之前。指令的值可能發生了改變也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)。 -
componentUpdated
:所在組件的 VNode 及其孩子的 VNode 全部更新時調用。 -
unbind
:只調用一次,指令與元素解綁時調用。
接下來我們來看一下鉤子函數的參數 (包括el,binding,vnode,oldVnode)。
自定義指令鉤子函數的參數
鉤子函數被賦予了以下參數:
-
el
:指令所綁定的元素,可以用來直接操作 DOM 。 -
binding
:一個對象,包含以下屬性: -
name
:指令名,不包括v-前綴。 -
value
:指令的綁定值,例如:v-my-directive=“1 + 1”, value 的值是2。 -
oldValue
:指令綁定的前一個值,僅在update和componentUpdated鉤子中可用。無論值是否改變都可用。 -
expression
:綁定值的字符串形式。例如v-my-directive=“1 + 1”,expression 的值是"1 + 1"。 -
arg
:傳給指令的參數。例如v-my-directive:foo,arg 的值是"foo"。 -
modifiers
:一個包含修飾符的對象。例如:v-my-directive.foo.bar, 修飾符對象 modifiers 的值是{ foo: true, bar: true }。 -
vnode
:Vue 編譯生成的虛擬節點,查閱 VNode API 了解更多詳情。 -
oldVnode
:上一個虛擬節點,僅在update和componentUpdated鉤子中可用。
例子
<div id="hook-arguments-example" v-demo:foo.a.b="message"></div>
Vue.directive('demo', { bind: function (el, binding, vnode) { var s = JSON.stringify el.innerHTML = 'name: ' + s(binding.name) + '<br>' + 'value: ' + s(binding.value) + '<br>' + 'expression: ' + s(binding.expression) + '<br>' + 'argument: ' + s(binding.arg) + '<br>' + 'modifiers: ' + s(binding.modifiers) + '<br>' + 'vnode keys: ' + Object.keys(vnode).join(', ') } }) new Vue({ el: '#hook-arguments-example', data: { message: 'hello!' } })
原文鏈接:https://blog.csdn.net/kingov/article/details/78296409
相關推薦
- 2022-05-20 ElasticSearch 7.X系列之:查詢分析索引磁盤使用空間_disk_usage
- 2022-12-07 R語言隨機抽樣詳解_R語言
- 2022-09-27 Go實現凱撒密碼加密解密_Golang
- 2022-04-15 Python3之字符串比較_重寫cmp函數方式_python
- 2022-09-09 C#流程控制詳解_C#教程
- 2023-07-06 mac快速配置iterm2
- 2022-08-15 Android?Gradle模塊依賴替換使用技巧_Android
- 2022-08-29 Python通用驗證碼識別OCR庫ddddocr的安裝使用教程_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支