目錄
指令註冊
鉤子函數
鉤子函數參數
首頁 web前端 Vue.js 了解Vue中的自訂指令

了解Vue中的自訂指令

Dec 04, 2020 pm 06:03 PM
vue

了解Vue中的自訂指令

  除了預設設定的核心指令( v-modelv-show ),Vue 也允許註冊自訂指令。在Vue裡,程式碼復用的主要形式和抽像是元件。然而,有的情況下,仍然需要對純 DOM 元素進行底層操作,這時候就會用到自訂指令。本文將詳細介紹Vue自訂指令

指令註冊

  以一個input元素自動獲得焦點為例,當頁面載入時,使用autofocus可以讓元素將獲得焦點 。但是autofocus在移動版Safari上不工作。現在註冊一個使元素自動取得焦點的指令

  指令註冊類似於元件註冊,包括全域指令和局部指令兩種

【全域指令】

  使用Vue. diretive()來全域註冊指令

1

2

3

4

// 注册一个全局自定义指令 v-focusVue.directive('focus', {  // 当绑定元素插入到 DOM 中。

  inserted: function (el) {    // 聚焦元素    el.focus()

  }

})

登入後複製

【局部指令】

  也可以註冊局部指令,元件或Vue建構子中接受一個directives 的選項

1

2

3

4

5

6

7

8

9

10

11

var vm = new Vue({

  el: '#example',

  directives:{

    focus:{

      inserted: function (el) {

        el.focus()

      }      

    }

  }

 

})

登入後複製

  接著可以在範本中任何元素上使用新的v-focus 屬性

1

2

<p id="example">

  <input v-focus></p>

登入後複製

1

2

3

4

5

6

<script>// 注册一个全局自定义指令 v-focusVue.directive('focus', {  // 当绑定元素插入到 DOM 中。  inserted: function (el) {    // 聚焦元素    el.focus()

  }

})var vm = new Vue({

  el: '#example',

 

})</script>

登入後複製

鉤子函數

  指令定義函數提供了幾個鉤子函數(可選) 

【bind】

  只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個在綁定時執行一次的初始化動作

【inserted】

  被綁定元素插入父節點時調用(父節點存在即可調用,不必存在於document 中)

【update】

  所在元件的VNode 更新時調用,但是可能發生在其孩子的VNode 更新之前。指令的值可能發生了改變也可能沒有。但可以透過比較更新前後的值來忽略不必要的模板更新

【componentUpdated】

  所在元件的VNode 及其孩子的VNode 全部更新時呼叫

【unbind】

  只呼叫一次, 指令與元素解綁時呼叫

鉤子函數參數

  鉤子子函數被賦予了下列參數

【el】

  指令所綁定的元素,可以用來直接操作DOM

【binding】

  一個對象,包含以下屬性:

1

2

3

4

5

6

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 鉤子中可用

  [注意]除了el 之外,其它參數都是唯讀的,盡量不要修改他們。如果需要在鉤子之間共享數據,建議透過元素的dataset 來進行

  下面是一個使用了這些參數的自訂鉤子樣本

1

<p id="example" v-demo:foo.a.b="message"></p>

登入後複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<script>Vue.directive('demo', {

  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: '#example',

  data: {

    message: 'hello!'

  }

})</script>

登入後複製


【函數簡寫】

   大多數情況下,可能想在bind

update
鉤子上做重複動作,並且不想關心其它的鉤子函數。可以這樣寫:

1

2

3

Vue.directive('color-swatch'function (el, binding) {

  el.style.backgroundColor = binding.value

})

登入後複製
【物件字面量】
  如果指令需要多個值,可以傳入一個JS物件字面量。指令函數能夠接受所有合法類型的JS表達式

1

<p v-demo="{ color: 'white', text: 'hello!' }"></p>

登入後複製

1

2

3

4

Vue.directive('demo'function (el, binding) {

  console.log(binding.value.color) // => "white"

  console.log(binding.value.text)  // => "hello!"

})

登入後複製
######相關推薦:############2020年前端vue面試題大匯總(附答案)## ##########vue教學推薦:2020最新的5個vue.js影片教學精選############更多程式相關知識,請造訪:###程式教學###! ! ######

以上是了解Vue中的自訂指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中echarts怎麼用 vue中echarts怎麼用 May 09, 2024 pm 04:24 PM

vue中echarts怎麼用

vue中的export default的作用 vue中的export default的作用 May 09, 2024 pm 06:48 PM

vue中的export default的作用

vue中map函數的用法 vue中map函數的用法 May 09, 2024 pm 06:54 PM

vue中map函數的用法

vue中event和$event區別 vue中event和$event區別 May 08, 2024 pm 04:42 PM

vue中event和$event區別

vue中onmounted作用 vue中onmounted作用 May 09, 2024 pm 02:51 PM

vue中onmounted作用

vue中export與export default區別 vue中export與export default區別 May 08, 2024 pm 05:27 PM

vue中export與export default區別

vue中的鉤子是什麼 vue中的鉤子是什麼 May 09, 2024 pm 06:33 PM

vue中的鉤子是什麼

vue中的onmounted對應react哪個生命週期 vue中的onmounted對應react哪個生命週期 May 09, 2024 pm 01:42 PM

vue中的onmounted對應react哪個生命週期

See all articles