Vue.js 自定義指令

除了默認(rèn)設(shè)置的核心指令( v-model 和 v-show ), Vue 也允許注冊自定義指令晶乔。
下面我們注冊一個全局指令 v-focus, 該指令的功能是在頁面加載時窍仰,元素獲得焦點:
<div id="app">
<p>頁面載入時鳖悠,input 元素自動獲取焦點:</p>
<input v-focus>
</div>

<script>
// 注冊一個全局自定義指令 v-focus
Vue.directive('focus', {
// 當(dāng)綁定元素插入到 DOM 中。
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
// 創(chuàng)建根實例
new Vue({
el: '#app'
})
</script>
我們也可以在實例使用 directives 選項來注冊局部指令,這樣指令只能在這個實例中使用:
<div id="app">
<p>頁面載入時,input 元素自動獲取焦點:</p>
<input v-focus>
</div>

<script>
// 創(chuàng)建根實例
new Vue({
el: '#app',
directives: {
// 注冊一個局部的自定義指令 v-focus
focus: {
// 指令的定義
inserted: function (el) {
// 聚焦元素
el.focus()
}
}
}
})
</script>

鉤子
鉤子函數(shù)
指令定義函數(shù)提供了幾個鉤子函數(shù)(可選):
bind: 只調(diào)用一次子巾,指令第一次綁定到元素時調(diào)用,用這個鉤子函數(shù)可以定義一個在綁定時執(zhí)行一次的初始化動作驶睦。
inserted: 被綁定元素插入父節(jié)點時調(diào)用(父節(jié)點存在即可調(diào)用砰左,不必存在于 document 中)匿醒。
update: 被綁定元素所在的模板更新時調(diào)用场航,而不論綁定值是否變化。通過比較更新前后的綁定值廉羔,可以忽略不必要的模板更新(詳細(xì)的鉤子函數(shù)參數(shù)見下)溉痢。
componentUpdated: 被綁定元素所在模板完成一次更新周期時調(diào)用。
unbind: 只調(diào)用一次憋他, 指令與元素解綁時調(diào)用孩饼。

鉤子函數(shù)參數(shù)
鉤子函數(shù)的參數(shù)有:

el: 指令所綁定的元素,可以用來直接操作 DOM 竹挡。
binding: 一個對象镀娶,包含以下屬性:
name: 指令名,不包括 v- 前綴揪罕。
value: 指令的綁定值梯码, 例如: v-my-directive="1 + 1", value 的值是 2宝泵。
oldValue: 指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用轩娶。無論值是否改變都可用儿奶。
expression: 綁定值的表達(dá)式或變量名。 例如 v-my-directive="1 + 1" 鳄抒, expression 的值是 "1 + 1"闯捎。
arg: 傳給指令的參數(shù)。例如 v-my-directive:foo许溅, arg 的值是 "foo"瓤鼻。
modifiers: 一個包含修飾符的對象。 例如: v-my-directive.foo.bar, 修飾符對象 modifiers 的值是 { foo: true, bar: true }贤重。
vnode: Vue 編譯生成的虛擬節(jié)點娱仔。
oldVnode: 上一個虛擬節(jié)點,僅在 update 和 componentUpdated 鉤子中可用游桩。

實例
<div id="app" v-runoob:hello.a.b="message">
</div>
<script>
Vue.directive('runoob', {
bind: function (el, binding, vnode) {
var s = JSON.stringify
el.innerHTML =
'name: ' + s(binding.name) + '
' + //name: "runoob"
'value: ' + s(binding.value) + '
' + //value: "菜鳥教程!"
'expression: ' + s(binding.expression) + '
' + //expression: "message"
'argument: ' + s(binding.arg) + '
' + //argument: "hello"
'modifiers: ' + s(binding.modifiers) + '
' + //modifiers: {"a":true,"b":true}
'vnode keys: ' + Object.keys(vnode).join(', ') //vnode keys: tag, data, children, text, elm, ns, context,
functionalContext, key, componentOptions, componentInstance,
parent, raw, isStatic, isRootInsert, isComment, isCloned,
isOnce
}
})
new Vue({
el: '#app',
data: {
message: '菜鳥教程!'
}
})
</script>

有時候我們不需要其他鉤子函數(shù)牲迫,我們可以簡寫函數(shù),如下格式:
Vue.directive('runoob', function (el, binding) {
// 設(shè)置指令的背景顏色
el.style.backgroundColor = binding.value.color
})

指令函數(shù)可接受所有合法的 JavaScript 表達(dá)式借卧,以下實例傳入了 JavaScript 對象:
<div id="app">
<div v-runoob="{ color: 'green', text: '菜鳥教程!' }"></div>
</div>
<script>
Vue.directive('runoob', function (el, binding) {
// 簡寫方式設(shè)置文本及背景顏色
el.innerHTML = binding.value.text
el.style.backgroundColor = binding.value.color
})
new Vue({
el: '#app'
})
</script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盹憎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铐刘,更是在濱河造成了極大的恐慌陪每,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镰吵,死亡現(xiàn)場離奇詭異檩禾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疤祭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門盼产,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勺馆,你說我怎么就攤上這事戏售。” “怎么了草穆?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵灌灾,是天一觀的道長。 經(jīng)常有香客問我悲柱,道長锋喜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任豌鸡,我火速辦了婚禮嘿般,結(jié)果婚禮上轴总,老公的妹妹穿的比我還像新娘。我一直安慰自己博个,他們只是感情好怀樟,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盆佣,像睡著了一般往堡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上共耍,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天虑灰,我揣著相機(jī)與錄音,去河邊找鬼痹兜。 笑死穆咐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的字旭。 我是一名探鬼主播对湃,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遗淳!你這毒婦竟也來了拍柒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤屈暗,失蹤者是張志新(化名)和其女友劉穎拆讯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體养叛,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡种呐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弃甥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽室。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潘飘,靈堂內(nèi)的尸體忽然破棺而出肮之,到底是詐尸還是另有隱情,我是刑警寧澤卜录,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站眶明,受9級特大地震影響艰毒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搜囱,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一丑瞧、第九天 我趴在偏房一處隱蔽的房頂上張望柑土。 院中可真熱鬧,春花似錦绊汹、人聲如沸稽屏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狐榔。三九已至,卻和暖如春获雕,著一層夾襖步出監(jiān)牢的瞬間薄腻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工届案, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留庵楷,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓楣颠,卻偏偏與公主長得像尽纽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子童漩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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