1. 全局指令css
<div id="app">html
<p>頁面載入時,input 元素自動獲取焦點:</p>vue
<input v-focus> </div>node
<script>express
// 註冊一個全局自定義指令 v-focus app
Vue.directive('focus', { 函數
// 當綁定元素插入到 DOM 中。 測試
inserted: function (el) {spa
// 聚焦元素 el.focus()code
}
})
// 建立根實例
new Vue({ el: '#app' })
</script>
2.局部指令
<div id="app">
<p>頁面載入時,input 元素自動獲取焦點:</p>
<input v-focus> </div>
<script>
// 建立根實例
new Vue({
el: '#app',
directives: {
// 註冊一個局部的自定義指令 v-focus
focus: {
// 指令的定義
inserted: function (el) {
// 聚焦元素
el.focus()
}
}
}
})
</script>
3.鉤子函數
指令定義函數提供了幾個鉤子函數(可選):
bind
: 只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數能夠定義一個在綁定時執行一次的初始化動做。
inserted
: 被綁定元素插入父節點時調用(父節點存在便可調用,沒必要存在於 document 中)。
update
: 被綁定元素所在的模板更新時調用,而不論綁定值是否變化。經過比較更新先後的綁定值,能夠忽略沒必要要的模板更新(詳細的鉤子函數參數見下)。
componentUpdated
: 被綁定元素所在模板完成一次更新週期時調用。
unbind
: 只調用一次, 指令與元素解綁時調用。
鉤子函數的參數有:
v-
前綴。v-my-directive="1 + 1"
, value 的值是 2
。update
和 componentUpdated
鉤子中可用。不管值是否改變均可用。v-my-directive="1 + 1"
, expression 的值是 "1 + 1"
。v-my-directive:foo
, arg 的值是 "foo"
。v-my-directive.foo.bar
, 修飾符對象 modifiers 的值是 { foo: true, bar: true }
。update
和 componentUpdated
鉤子中可用。例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 測試實例 - 菜鳥教程(runoob.com)</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app" v-runoob:hello.a.b="message"></div>
<!--該指令的參數就是字符串hello,修飾符就是字符串"a"和"b",能夠有多個修飾符 -->
<script> Vue.directive('runoob', { 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: '#app', data: { message: '菜鳥教程!' } })</script></body></html>