vue 自定義指令directives及其常用鉤子函數(shù)說明
自定義指令directives及常用鉤子函數(shù)
說明
除了核心功能默認(rèn)內(nèi)置的指令 (v-model 和 v-show),Vue 也允許注冊(cè)自定義指令
使用的地方:有的情況下,你仍然需要對(duì)普通 DOM 元素進(jìn)行底層操作,這時(shí)候就會(huì)用到自定義指令
鉤子函數(shù)
inserted
:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。bind
:只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用。在這里可以進(jìn)行一次性的初始化設(shè)置。update
: 所在組件的 VNode 更新時(shí)調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新。componentUpdated
:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。unbind
:只調(diào)用一次,指令與元素解綁時(shí)調(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為綁定元素,可以對(duì)其進(jìn)行dom操作 ?? ? ? ? ? console.log(binding) ? ? ? ? ?//一個(gè)對(duì)象,包含很多屬性屬性(在下面) ?? ? ? ?}, ?? ? ? ?bind: function (el, binding, vnode) { ?? ??? ? ? ?el.innerHTML =binding.value ?? ??? ? ?} ? ?? ?} ? }, ? methods:{ ??? ?... ... ? } } </script>
鉤子函數(shù)里面的參數(shù)
el
:指令所綁定的元素,可以用來直接操作 DOM。binding
:一個(gè)對(duì)象,包含以下 property:
name
:指令名,不包括 v- 前綴。
value
:指令的綁定值,例如:v-my-directive=“1 + 1” 中,綁定值為 2。
oldValue
:指令綁定的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
expression
:字符串形式的指令表達(dá)式。例如 v-my-directive=“1 + 1” 中,表達(dá)式為 “1 + 1”。
arg
:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 “foo”。
modifiers
:一個(gè)包含修飾符的對(duì)象。例如:v-my-directive.foo.bar 中,修飾符對(duì)象為 { foo: true, bar: true }。
vnode
:Vue 編譯生成的虛擬節(jié)點(diǎn)。oldVnode
:上一個(gè)虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。
vue 自定義指令 directives選項(xiàng)
directives選項(xiàng)中定義 指令
使用時(shí)添加v-前綴
全局注冊(cè)
app.directive('xxx',{})
支持動(dòng)態(tài)指令參數(shù)
v-xx:[abc]='xxx'
指令函數(shù)能夠接受所有合法的 JavaScript 表達(dá)式。
如果方法只需要在 mounted 和 updated 的時(shí)間鉤子觸發(fā)
可以簡(jiǎn)寫為單純的回調(diào)函數(shù)
參數(shù)說明
第一個(gè)參數(shù) 為綁定的元素
第二個(gè)參數(shù) 為傳遞的對(duì)象
.arg
綁定的參數(shù).value
等號(hào)后對(duì)應(yīng)的值
在應(yīng)用到組件上時(shí),和非 prop 的 attribute不同,指令不會(huì)通過 v-bind="$attrs" 被傳入另一個(gè)元素。
當(dāng)被應(yīng)用在一個(gè)多根節(jié)點(diǎn)的組件上時(shí),指令會(huì)被忽略,并且會(huì)拋出一個(gè)警告。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue3實(shí)現(xiàn)全局loading指令的示例詳解
- vue全局注冊(cè)自定義指令防抖解析
- vue全局自定義指令和局部自定義指令的使用
- Vue全局自定義指令Modal拖拽的實(shí)踐
- vue全局自定義指令-元素拖拽的實(shí)現(xiàn)代碼
- vue directive定義全局和局部指令及指令簡(jiǎn)寫
- 對(duì)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中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng)
這篇文章主要介紹了在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue+j簡(jiǎn)單的實(shí)現(xiàn)輪播效果,滾動(dòng)公告,銜接
這篇文章主要介紹了vue+j簡(jiǎn)單的實(shí)現(xiàn)輪播效果,滾動(dòng)公告,銜接,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06Vue組件設(shè)計(jì)之多列表拖拽交換排序功能實(shí)現(xiàn)
這篇文章主要介紹了Vue組件設(shè)計(jì)之多列表拖拽交換排序,常見的場(chǎng)景有單列表拖拽排序,多列表拖拽交換排序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05vue-cli創(chuàng)建vue項(xiàng)目的詳細(xì)步驟記錄
vue.cli是vue中的項(xiàng)目構(gòu)造工具,是一個(gè)npm包,需要安裝node.js和 git才能用,下面這篇文章主要給大家介紹了關(guān)于利用vue-cli創(chuàng)建vue項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2022-06-06vee-validate vue 2.0自定義表單驗(yàn)證的實(shí)例
今天小編就為大家分享一篇vee-validate vue 2.0自定義表單驗(yàn)證的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08