1.無參數javascript
自定義指令的方式:
1. 使用Vue.directive 來自定義
2. 第一個參數就是 指令名稱 xart
3. el 表示當前的html dom對象
4. 在方法體內就能夠經過 innerHTML style.color 等方式操控當前元素了html
<body> <div id="app"> <div v-xxx> 商店 </div> </div> <script type="text/javascript"> Vue.directive('xxx',function(el){ el.innerHTML = el.innerHTML + ' ------------ ' el.style.color = 'blue' }) new Vue({ el:'#app' }) </script> </body>
2.有參數:vue
<body> <div id="app"> <div v-xxx='{color:"red"}'> 商店 </div> </div> <script type="text/javascript"> Vue.directive('xxx', function (el,binding) { el.innerHTML = el.innerHTML + '( ' + binding.value.color + ' )' el.style.color = binding.value.color }) new Vue({ el:'#app' }) </script> </body>
3.鉤子函數:又叫作回調函數,或者事件響應函數。 指的是,一個指令在建立過程當中,經歷不一樣生命週期的時候,vue.js 框架調用的函數。java
指令定義函數提供了幾個鉤子函數(可選):node
bind
: 只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數能夠定義一個在綁定時執行一次的初始化動做。express
inserted
: 被綁定元素插入父節點時調用(父節點存在便可調用,沒必要存在於 document 中)。app
update
: 被綁定元素所在的模板更新時調用,而不論綁定值是否變化。經過比較更新先後的綁定值,能夠忽略沒必要要的模板更新(詳細的鉤子函數參數見下)。框架
componentUpdated
: 被綁定元素所在模板完成一次更新週期時調用。dom
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
鉤子中可用。<script src="https://how2j.cn/study/vue.min.js"></script> <div id="div1"> <div v-xart:hello.a.b="message"> </div> </div> <script> Vue.directive('xart', { 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(', ') }, update: function (newValue, oldValue) { // 值更新時的工做 // 也會以初始值爲參數調用一次 }, unbind: function () { // 清理工做 // 例如,刪除 bind() 添加的事件監聽器 } }) new Vue({ el: '#div1', data:{ message:'hello vue.js' } }) </script>