vue 自定義指令

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: 只調用一次, 指令與元素解綁時調用。

鉤子函數的參數有:

  • el: 指令所綁定的元素,能夠用來直接操做 DOM 。
  • binding: 一個對象,包含如下屬性:
    • name: 指令名,不包括 v- 前綴。
    • value: 指令的綁定值, 例如: v-my-directive="1 + 1", value 的值是 2
    • oldValue: 指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。不管值是否改變均可用。
    • expression: 綁定值的表達式或變量名。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"
    • arg: 傳給指令的參數。例如 v-my-directive:foo, arg 的值是 "foo"
    • modifiers: 一個包含修飾符的對象。 例如: v-my-directive.foo.bar, 修飾符對象 modifiers 的值是 { foo: true, bar: true }
  • vnode: Vue 編譯生成的虛擬節點。
  • oldVnode: 上一個虛擬節點,僅在 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>

相關文章
相關標籤/搜索