欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Vue2.x-directive的學(xué)習(xí)筆記

 更新時間:2017年07月17日 15:01:14   作者:鋒子鍋鍋  
這篇文章主要介紹了詳解Vue2.x-directive的學(xué)習(xí)筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

除了默認(rèn)設(shè)置的核心指令( v-model 和 v-show ),Vue 也允許注冊自定義指令。注意,在 Vue2.0 里面,代碼復(fù)用的主要形式和抽象是組件——然而,有的情況下,你仍然需要對純 DOM 元素進(jìn)行底層操作,這時候就會用到自定義指令。

官方建議directive是對純 DOM 元素進(jìn)行底層操作使用,一般情況下還是建議使用組件的復(fù)用。

directive的意義

自定義指令是用來操作DOM的。

盡管數(shù)據(jù)驅(qū)動是Vue的核心之一,但是在實際情況下,并不是所有的情況都可以用數(shù)據(jù)來驅(qū)動視圖,我們不可避免的會在有些情況下有操作DOM的需求,所以directive也就出現(xiàn)了。自定義指令就是一種有效的補充和擴(kuò)展,不僅可用于定義任何的DOM操作,并且是可復(fù)用的。

官方栗子

code

// 注冊一個全局自定義指令 v-focus
Vue.directive('focus', {
 // 當(dāng)綁定元素插入到 DOM 中。
 inserted: function (el) {
  // 聚焦元素
  el.focus()
 }
})

//局部指令
directive: {
 focus(el){
  el.focus()
 }
}

use

<input v-focus>
//input標(biāo)簽自動獲得標(biāo)簽

是不是感覺很簡單?相信自己,其實vue大法真心不難,難得是如何應(yīng)用。下面先來簡單看看的鉤子函數(shù)。

鉤子函數(shù)

  1. bind:在該元素綁定指令時調(diào)用且僅調(diào)用一次,用于初始化
  2. inserted:元素插入父節(jié)點時調(diào)用(可能仍在虛擬Dom中)
  3. update:模板更新時調(diào)用
  4. componentUpdated: 被綁定元素所在模板完成一次更新周期時調(diào)用。
  5. unbind: 只調(diào)用一次, 指令與元素解綁時調(diào)用。

鉤子參數(shù)

  1. el: 指令所綁定的元素,可以用來直接操作 DOM 。
  2. binding: 一個對象,包含以下屬性:
    1. name: 指令名,不包括 v- 前綴。
    2. value: 指令的綁定值
    3. oldValue: 指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
    4. expression: 綁定值的字符串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
    5. arg: 傳給指令的參數(shù)。例如 v-my-directive:foo, arg 的值是 "foo"。
    6. modifiers: 一個包含修飾符的對象。 例如: v-my-directive.foo.bar, 修飾符對象 modifiers 的值是 { foo: true, bar: true }。
  3. vnode: Vue 編譯生成的虛擬節(jié)點。
  4. oldVnode: 上一個虛擬節(jié)點,僅在 update 和 componentUpdated 鉤子中可用。

實際應(yīng)用

directive的語法就這么簡單,在合適的鉤子中做應(yīng)該做的事就可以了。下面會列出兩個使用指令的栗子

集成第三方插件

用了一段時間的vue,其實我都沒有留意directive具體使用,一般來言真的很少使用到。直到有一次需要集成第三方插件到Vue時才發(fā)現(xiàn),原來directive是集成第三方插件最合適也是最簡單的方式。凡是關(guān)于第三方的集成,都可以嘗試使用directive

import Vue from 'vue'
import hljs from 'highlight.js'
import 'highlight.js/styles/monokai-sublime.css'

Vue.directive('highlight', {
 bind(el){
  hljs.highlightBlock(el);
 },
})

use

<pre>
 <code v-highlight>
   //code here
 </code>
</pre>

如上,我注冊了一個全局的指令 highlight。 指令的作用就是高亮代碼,當(dāng)元素帶上'v-highlight'時,hljs就會去初始化該Dom。

當(dāng)然我這是可以使用組件來實現(xiàn)這個功能,但絕對沒有指令那么方便快捷,下面是一個簡略的組件,可以看出,不僅定義和使用都比指令來的復(fù)雜。

<template>
  <pre>
    <code ref="code">
     <slot name="code"></slot>
    </code>
  </pre>
</template>
<script>
  import hljs from 'highlight.js'
  import 'highlight.js/styles/monokai-sublime.css'
  export default {
    mounted(){
     hljs.highlightBlock(this.$refs.code);
    }
  }
</script>

指令驗證

如果需要一個可以復(fù)用的驗證,我們也可以使指令來完成,下面來看一個簡單的栗子:

Vue.directive('checkName', {
 //監(jiān)控數(shù)據(jù)變化 
 update(el, binding){
   let regex = /^[a-zA-z]{6,10}$/g;
   //=value === oldValue, 避免重復(fù)更新
   if(binding.value !== binding.oldValue){
     el.style.border = regex.test(binding.value) ? '' : '1px solid red';
   }
 }
})

user

<input v-model='value1' v-checkName='value1'></input>
<input v-model='value2' v-checkName='value2'></input>
<input v-model='value3' v-checkName='value3'></input>
<input v-model='value4' v-checkName='value4'></input>

//當(dāng)value的值不是6-10的字母的時,input的boder變?yōu)榧t色;

result

結(jié)果很明顯,不符合規(guī)則的數(shù)據(jù),input的邊框變紅了。

End

這里只是抄寫下官方的文檔,舉兩個栗子,就是那么簡單,任性 ( ̄~ ̄) !其實主要想說明白的一件事就是明確dirctive的意義:指令是用來操作DOM的,希望能起到拋磚引玉的作用吧。

參考

VUE-自定義指令

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • react+?ts?vite搭建及二次封裝請求的過程解析

    react+?ts?vite搭建及二次封裝請求的過程解析

    這篇文章主要介紹了react+?ts?vite搭建及二次封裝請求,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解Nuxt.js中使用Element-UI填坑

    詳解Nuxt.js中使用Element-UI填坑

    這篇文章主要介紹了詳解Nuxt.js中使用Element-UI填坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 詳解基于 axios 的 Vue 項目 http 請求優(yōu)化

    詳解基于 axios 的 Vue 項目 http 請求優(yōu)化

    這篇文章主要介紹了詳解基于 axios 的 Vue 項目 http 請求優(yōu)化,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • vuex實現(xiàn)購物車的增加減少移除

    vuex實現(xiàn)購物車的增加減少移除

    這篇文章主要為大家詳細(xì)介紹了vuex實現(xiàn)購物車的增加減少移除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 為vue中的data賦值computed計算屬性后,出現(xiàn)undefined原因及解決

    為vue中的data賦值computed計算屬性后,出現(xiàn)undefined原因及解決

    這篇文章主要介紹了為vue中的data賦值computed計算屬性后,出現(xiàn)undefined原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue3 pinia踩坑及解決方案詳解

    vue3 pinia踩坑及解決方案詳解

    這篇文章主要為大家介紹了vue3 pinia踩坑及解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • vue中css如何使用data中的變量

    vue中css如何使用data中的變量

    這篇文章主要介紹了vue中css如何使用data中的變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue中實現(xiàn)權(quán)限管理詳解

    Vue中實現(xiàn)權(quán)限管理詳解

    這篇文章主要介紹了Vue中實現(xiàn)權(quán)限管理詳解,權(quán)限是對特定資源的訪問許可,所謂權(quán)限控制,也就是確保用戶只能訪問到被分配的資源,而前端權(quán)限歸根結(jié)底是請求的發(fā)起權(quán),請求的發(fā)起可能有下面兩種形式觸發(fā),需要的朋友可以參考下
    2023-08-08
  • Vue如何通過Vue.prototype定義原型屬性實現(xiàn)全局變量

    Vue如何通過Vue.prototype定義原型屬性實現(xiàn)全局變量

    在Vue.js開發(fā)中,通過原型屬性為Vue實例添加全局變量是一種常見做法,使用$前綴命名,可以避免與組件內(nèi)部的數(shù)據(jù)、方法或計算屬性產(chǎn)生命名沖突,這種方式簡單有效,確保了變量在所有Vue實例中的可用性,同時保持全局作用域的整潔
    2024-10-10
  • vue2+springsecurity權(quán)限系統(tǒng)的實現(xiàn)

    vue2+springsecurity權(quán)限系統(tǒng)的實現(xiàn)

    本文主要介紹了vue2+springsecurity權(quán)限系統(tǒng)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論