vue 自定義指令directives及其常用鉤子函數(shù)說明
自定義指令directives及常用鉤子函數(shù)
說明
除了核心功能默認(rèn)內(nèi)置的指令 (v-model 和 v-show),Vue 也允許注冊自定義指令
使用的地方:有的情況下,你仍然需要對普通 DOM 元素進(jìn)行底層操作,這時候就會用到自定義指令
鉤子函數(shù)
inserted:被綁定元素插入父節(jié)點(diǎn)時調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。bind:只調(diào)用一次,指令第一次綁定到元素時調(diào)用。在這里可以進(jìn)行一次性的初始化設(shè)置。update: 所在組件的 VNode 更新時調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新。componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。unbind:只調(diào)用一次,指令與元素解綁時調(diào)用。
vue 全局定義
使用:<span v-指令名稱> welcome </span> 也可以 v-指令名稱="傳遞的參數(shù)"
定義:Vue.directive(指令名稱,{指令鉤子:功能函數(shù)})
<div id="root">
? ? ? ? <span v-red>welcome</span>
? ? </div>
? ? <script type="text/javascript">
? ? ? ? Vue.directive('red',{ ? ? ? //定義 ???
? ? ? ? ? ? inserted:function(el){ ?//鉤子函數(shù) ???
? ? ? ? ? ? ? ? el.style.background = 'red';
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? var vm = new Vue({
? ? ? ??? ??? ?el:"#root"
? ? ? ? ? ? data:{ ? ? ? ? ? ?
? ? ? ? ? ? },
? ? ? ? })
? ? </script>局部定義(vue-cli)
使用:<div v-指令名稱='傳遞的參數(shù)'></div> // 傳遞參數(shù)可以根據(jù)功能需求進(jìn)行操作
定義:directives{指令名稱:{鉤子函數(shù):功能函數(shù)}}
<template>
? <div class="hello">
? ?? ?<div v-test='name'></div>
? </div>
</template>
<script>
export default {
? data () {
? ? return {
? ? ?name:'userName',
? ? }
? },
? directives:{ ? ? //自定義指令 ???
? ?? ?test:{
?? ? ? ?inserted: function (el,binding) { //e為綁定元素,可以對其進(jìn)行dom操作
?? ? ? ? ? console.log(binding) ? ? ? ? ?//一個對象,包含很多屬性屬性(在下面)
?? ? ? ?},
?? ? ? ?bind: function (el, binding, vnode) {
?? ??? ? ? ?el.innerHTML =binding.value
?? ??? ? ?}
? ?? ?}
? },
? methods:{
??? ?... ...
? }
}
</script>鉤子函數(shù)里面的參數(shù)
el:指令所綁定的元素,可以用來直接操作 DOM。binding:一個對象,包含以下 property:
name:指令名,不包括 v- 前綴。
value:指令的綁定值,例如:v-my-directive=“1 + 1” 中,綁定值為 2。
oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
expression:字符串形式的指令表達(dá)式。例如 v-my-directive=“1 + 1” 中,表達(dá)式為 “1 + 1”。
arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 “foo”。
modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。
vnode:Vue 編譯生成的虛擬節(jié)點(diǎn)。oldVnode:上一個虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。
vue 自定義指令 directives選項(xiàng)
directives選項(xiàng)中定義 指令
使用時添加v-前綴
全局注冊
app.directive('xxx',{})支持動態(tài)指令參數(shù)
v-xx:[abc]='xxx'
指令函數(shù)能夠接受所有合法的 JavaScript 表達(dá)式。
如果方法只需要在 mounted 和 updated 的時間鉤子觸發(fā)
可以簡寫為單純的回調(diào)函數(shù)
參數(shù)說明
第一個參數(shù) 為綁定的元素
第二個參數(shù) 為傳遞的對象
.arg綁定的參數(shù).value等號后對應(yīng)的值
在應(yīng)用到組件上時,和非 prop 的 attribute不同,指令不會通過 v-bind="$attrs" 被傳入另一個元素。
當(dāng)被應(yīng)用在一個多根節(jié)點(diǎn)的組件上時,指令會被忽略,并且會拋出一個警告。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Vue3實(shí)現(xiàn)全局loading指令的示例詳解
- vue全局注冊自定義指令防抖解析
- vue全局自定義指令和局部自定義指令的使用
- Vue全局自定義指令Modal拖拽的實(shí)踐
- vue全局自定義指令-元素拖拽的實(shí)現(xiàn)代碼
- vue directive定義全局和局部指令及指令簡寫
- 對Vue2 自定義全局指令Vue.directive和指令的生命周期介紹
- vue3的自定義指令directives實(shí)現(xiàn)
- vue?filters和directives訪問this的問題詳解
- vue通過指令(directives)實(shí)現(xiàn)點(diǎn)擊空白處收起下拉框
- 詳解vue + vuex + directives實(shí)現(xiàn)權(quán)限按鈕的思路
- vue全局指令文件?directives詳解
相關(guān)文章
Vue開發(fā)中出現(xiàn)Loading?Chunk?Failed的問題解決
本文主要介紹了Vue開發(fā)中出現(xiàn)Loading?Chunk?Failed的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
關(guān)于vue.js中實(shí)現(xiàn)方法內(nèi)某些代碼延時執(zhí)行
今天小編就為大家分享一篇關(guān)于vue.js中實(shí)現(xiàn)方法內(nèi)某些代碼延時執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue3-print-nb實(shí)現(xiàn)頁面打印(含分頁打印)示例代碼
大多數(shù)后臺系統(tǒng)中都存在打印的需求,在有打印需求時,對前端來說當(dāng)然是直接打印頁面更容易,下面這篇文章主要給大家介紹了關(guān)于vue3-print-nb實(shí)現(xiàn)頁面打印(含分頁打印)的相關(guān)資料,需要的朋友可以參考下2024-01-01
詳解Vue基于vue-quill-editor富文本編輯器使用心得
這篇文章主要介紹了Vue基于vue-quill-editor富文本編輯器使用心得,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01

