除了核心功能默认的内置指令(v-model和v-show),vue也容许注册自定义指令。注意,在Vue2.0中,代码复用和抽象的主要形式是组件,可是在有些状况下,咱们须要对普通的DOM元素进行底层操做,这时候就须要咱们用到自定义指令。html
简单事例,当页面加载时元素就会得到焦点,可是实际上只要咱们代码完成,页面没打开时这个输入框已是聚焦状态:vue
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="Vue.min.js"></script> </head> <body> <div id="app"> <input v-focus> </div> <script> //注册一个全局自定义指令v-focus Vue.directive('focus', { // 当绑定元素插入到DOM中 inserted: function (el) { // 聚焦元素 el.focus() } }); var app = new Vue({ el: '#app' }); </script> </body> </html>
咱们可使用Vue.directive的方法传入执行id和定义对象来注册一个全局的自定义指令,一个指令对象能够提供几个钩子函数:node
定义对象的钩子函数参数有(除了el以外其余参数都是i只读的)express
指令的参数能够是动态的。 自定义钩子函数属性属性事例:app
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <script src="Vue.min.js"></script> </head> <body> <div id="hook" v-xkd:foo.a.b="message"></div> <script> // 使用自定义指令 Vue.directive('xkd', { // 指令在绑定到元素要执行的操做 bind: function (el, binding, vnode) { var w = JSON.stringify; // 准备将传递来的参数显示在调用该指令的元素的innerHTML上 el.innerHTML = 'name: ' + w(binding.name) + '<br><br>' + 'value: ' + w(binding.value) + '<br><br>' + 'expression: ' + w(binding.expression) + '<br><br>' + 'argument: ' + w(binding.arg) + '<br><br>' + 'modifiers: ' + w(binding.modifiers) + '<br><br>' + 'vnode keys: ' + Object.keys(vnode).join(', ') } }) // 建立自定义指令 new Vue({ el: '#hook', data: { message: '侠课岛' } }) </script></body></html>
大多数状况下,可能想在 bind 和 update 钩子上作重复的动做,可是并不想关心其余钩子函数的状况,咱们能够这样写:函数
Vue.directive('func-abbr', function (el, binding) { el.style.backgroundColor = binding.value })
若是指令须要多个值,那么能够传入一个JavaScript对象字面量;同一个特性内部,逗号隔开的多个从句被绑定为多个指令实例。code
<div id="hook" v-demo="{ color: 'green', text: 'Chivalrous Island!'}"></div> <script> Vue.directive('demo', function (el, binding) { console.log(binding.value.color); console.log(binding.value.text); }) // 建立自定义指令 new Vue({ el: '#hook', data: { message: '侠课岛' } }) </script>