Vue 自定義指令

一、自定義指令基本用法

Vue 中已有的指令往往不能滿足我們開發(fā)過程中的全部要求雾棺,因此有時(shí)我們需要自定義一些指令來實(shí)現(xiàn)某些特有的功能伐坏。
和組件類似掠廓,自定義指令也分為全局注冊(cè)和局部注冊(cè),二者區(qū)別就是把component 換成了 directive苔严。例:

Vue.directive('指令名稱', {
  // 指令的選項(xiàng)
});

二定枷、鉤子函數(shù)

Vue 提供了幾個(gè)鉤子函數(shù)作為自定義指令的選項(xiàng):

  • bind:只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用届氢。用這個(gè)鉤子函數(shù)可以定義一個(gè)在綁定時(shí)執(zhí)行一次的初始化動(dòng)作欠窒。
  • inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在于 document 中)退子。
  • update:被綁定元素所在的模板更新時(shí)調(diào)用岖妄,而不論綁定值是否變化。通過比較更新前后的綁定值絮供,可以忽略不必要的模板更新(詳細(xì)的鉤子函數(shù)參數(shù)見下)衣吠。
  • componentUpdated:被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。
  • unbind:只調(diào)用一次壤靶, 指令與元素解綁時(shí)調(diào)用缚俏。

三、鉤子函數(shù)的參數(shù)

  • el:指令所綁定的元素贮乳,可以用來直接操作 DOM 忧换。
<div id="app">
    獲取焦點(diǎn):<input type="text" v-focus> <br>
</div>
<script>
    // 需求:input 框在初始化時(shí)就獲取焦點(diǎn)
    Vue.directive('focus', {
        // 指令的選項(xiàng)
        inserted: function(el){  // 插入到父節(jié)點(diǎn)時(shí)就調(diào)用
            el.focus()
        }
    });
    var app = new Vue({
        el: "#app", 
    })
</script>
  • binding:一個(gè)對(duì)象,包含以下屬性:
    --- name:指令名向拆,不包括 v-- 前綴亚茬。
    --- value:指令的綁定值, 例如 v-apple="1 + 1", value 的值是 2浓恳。
    --- oldValue:指令綁定的前一個(gè)值刹缝,僅在 updatecomponentUpdated 鉤子中可用,無論值是否改變都可用颈将。
    --- expression:綁定值的字符串形式梢夯。 例如 v-apple="1 + 1"expression 的值是 1 + 1晴圾。
    --- arg:傳遞給指令的參數(shù)颂砸。例如 v-apple:peararg 的值是 pear
    --- modifiers:一個(gè)包含修飾符的對(duì)象人乓。 例如 v-apple:pear.a.b.c勤篮,修飾符對(duì)象 modifiers 的值是 {"a":true,"b":true,"c":true}
<div id="app">
    <!-- 自定義指令 -->
    <div v-apple:pear.a.b.c="red"></div>
</div>
<script>
    Vue.directive('apple', {
        bind: function(el, binding){
            el.innerHTML =
            'name' + ' --- ' + binding.name + '<br>' +
            'value' + ' --- ' + binding.value + '<br>' +
            'expression' + ' --- ' + binding.expression + '<br>' +
            'argument' + ' --- ' + binding.arg + '<br>' +
            'modifiers' + ' --- ' + JSON.stringify(binding.modifiers) + '<br>'
        }
    });
    var app = new Vue({
        el: "#app", 
        data: {
            red: '我是自定義指令所綁定的值'
        }
    })
</script>

運(yùn)行結(jié)果為:
自定義指令 --- binding
  • vnode:Vue 編譯生成的虛擬節(jié)點(diǎn)色罚。
<div id="app">
    <div v-apple:pear.a.b.c="red"></div>
</div>
<script>
    Vue.directive('apple', {
        bind: function(el, binding, vnode){
            var keys = [];
            for(var key in vnode){
                keys.push(key)
            };
            el.innerHTML =
                'vnode 中的 keys:' + keys.join("--") + '<br>'
        }
    });
    var app = new Vue({
        el: "#app", 
        data: {
            red: '我是自定義指令所綁定的值'
        }
    })
</script>

運(yùn)行結(jié)果為:
自定義指令 --- vnode
  • oldVnode: 上一個(gè)虛擬節(jié)點(diǎn)碰缔,僅在 updatecomponentUpdated 鉤子中可用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末保屯,一起剝皮案震驚了整個(gè)濱河市手负,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姑尺,老刑警劉巖竟终,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異切蟋,居然都是意外死亡统捶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門柄粹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喘鸟,“玉大人,你說我怎么就攤上這事驻右∈埠冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵堪夭,是天一觀的道長愕把。 經(jīng)常有香客問我,道長森爽,這世上最難降的妖魔是什么恨豁? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮爬迟,結(jié)果婚禮上橘蜜,老公的妹妹穿的比我還像新娘。我一直安慰自己付呕,他們只是感情好计福,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徽职,像睡著了一般棒搜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上活箕,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼育韩。 笑死克蚂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筋讨。 我是一名探鬼主播埃叭,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼悉罕!你這毒婦竟也來了赤屋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤壁袄,失蹤者是張志新(化名)和其女友劉穎类早,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗜逻,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涩僻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栈顷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆日。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萄凤,靈堂內(nèi)的尸體忽然破棺而出室抽,到底是詐尸還是另有隱情,我是刑警寧澤靡努,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布坪圾,位于F島的核電站,受9級(jí)特大地震影響颤难,放射性物質(zhì)發(fā)生泄漏神年。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一行嗤、第九天 我趴在偏房一處隱蔽的房頂上張望已日。 院中可真熱鬧,春花似錦栅屏、人聲如沸飘千。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽护奈。三九已至,卻和暖如春哥纫,著一層夾襖步出監(jiān)牢的瞬間霉旗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厌秒,地道東北人读拆。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像鸵闪,于是被迫代替她去往敵國和親檐晕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Vue指令 Vue的指令以v-開頭蚌讼,作用在HTML元素上辟灰,將指令綁定在元素上,給綁定的元素添加一些特殊行為篡石。 例如...
    syd192閱讀 1,297評(píng)論 0 9
  • 自定義指令 Vue.js已經(jīng)為我們提供了很多默認(rèn)的指令芥喇,例如:v-for、v-if夏志、v-bind乃坤、v-on等,這些...
    懶人成長閱讀 1,076評(píng)論 0 2
  • 最近經(jīng)常使用指令來實(shí)現(xiàn)一些功能沟蔑,覺得甚是好用湿诊。然而卻遇到一個(gè)問題:v-if和我自定義指令在同一個(gè)標(biāo)簽里使用的時(shí)候,...
    墨子柚閱讀 1,685評(píng)論 0 0
  • 有的情況下瘦材,需要對(duì)普通 DOM 元素進(jìn)行底層操作厅须,這時(shí)候就會(huì)用到自定義指令。舉個(gè)聚焦輸入框的例子食棕,如下: 鉤子函數(shù)...
    zsyyyyy閱讀 244評(píng)論 0 0
  • 自定義指令的基本用法 和組件類似分全局注冊(cè)和局部注冊(cè)朗和,區(qū)別就是把component換成了directive 鉤子函...
    諾CIUM閱讀 250評(píng)論 0 2