最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue自定義指令深入探討實現

 更新時間:2023年05月11日 14:58:31   作者:世界和平  
這篇文章主要介紹了Vue自定義指令的實現,Vue支持自定義指令,開發(fā)者可以根據自己的需求,創(chuàng)建自己的指令來擴展Vue的功能,需要詳細了解可以參考下文

指令

想要了解自定義指令,那肯定得先明白什么是指令。

指令的本質:語法糖,標志位。在編譯階段 render 函數里,會把指令編譯成 JavaScript 代碼。

常見的Vue內置指令有:

  • v-on 即 @。v-on:click=”function“, 縮寫為@click=”function“
  • v-if
  • v-for
  • v-html
  • ……

所以指令就是跟我們的元素標簽綁定在一起的某些事件,當我們dom組件在一定條件下就會觸發(fā)相對應的指令。

自定義指令

先看看Vue官方的說法:

除了核心功能默認內置的指令 (v-model 和 v-show),Vue 也允許注冊自定義指令。注意,在 Vue2.0 中,代碼復用和抽象的主要形式是組件。然而,有的情況下,你仍然需要對普通 DOM 元素進行底層操作,這時候就會用到自定義指令

指令的自定義即我們按照Vue制定的規(guī)則去編寫一套可以對dom進行操作的功能函數,然后就能與其他Vue的內置指令一樣具有一定的功能效果。指令相當于簡化了我們對dom的操作,可以快速進行dom的事件處理,當然我們應該盡量減少使用一些容易消耗瀏覽器資源的指令。

關于注冊自定義指令

全局注冊

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

局部注冊

directives: {
  focus: {
    // 指令的定義
    inserted: function (el) {
      el.focus()
    }
  }
}

自定義指令的鉤子函數

bind:只調用一次,指令第一次綁定到元素時調用。在這里可以進行一次性的初始化設置。

inserted:被綁定元素插入父節(jié)點時調用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。

update:所在組件的 VNode 更新時調用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)。

componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調用。

unbind:只調用一次,指令與元素解綁時調用。

封裝自定義指令

通過以上的描述,相信大多數人大概對自定義指令以及指令都有了一定的理解,已經可以開始編寫一些簡單不重復的指令。但是面對一些復雜而且可能需要經常使用到的自定義指令,這個時候我們最好還是把代碼進行一層封裝,這樣可以方便我們后續(xù)的修改和有層次的代碼編寫。

1.首先可以選擇在根目錄下新建文件夾directive

2.創(chuàng)建自定義指令的文件夾

3.文件夾下的index.js文件,例如實現一鍵復制文本內容,用于鼠標右鍵粘貼。

const copy = {
  bind(el, { value }) {
    el.$value = value
    el.handler = () => {
      if (!el.$value) {
        // 值為空的時候,給出提示。可根據項目UI仔細設計
        console.log('無復制內容')
        return
      }
      // 動態(tài)創(chuàng)建 textarea 標簽
      const textarea = document.createElement('textarea')
      // 將該 textarea 設為 readonly 防止 iOS 下自動喚起鍵盤,同時將 textarea 移出可視區(qū)域
      textarea.readOnly = 'readonly'
      textarea.style.position = 'absolute'
      textarea.style.left = '-9999px'
      // 將要 copy 的值賦給 textarea 標簽的 value 屬性
      textarea.value = el.$value
      // 將 textarea 插入到 body 中
      document.body.appendChild(textarea)
      // 選中值并復制
      textarea.select()
      const result = document.execCommand('Copy')
      if (result) {
        console.log('復制成功') // 可根據項目UI仔細設計
      }
      document.body.removeChild(textarea)
    }
    // 綁定點擊事件,就是所謂的一鍵 copy 啦
    el.addEventListener('click', el.handler)
  },
  // 當傳進來的值更新的時候觸發(fā)
  componentUpdated(el, { value }) {
    el.$value = value
  },
  // 指令與元素解綁的時候,移除事件綁定
  unbind(el) {
    el.removeEventListener('click', el.handler)
  },
}
export default copy

4.directive下需要有一個總管全局directive的文件,便于我們進行全局注冊時的操作。

directive/index.js

import copy from './copy'
// 自定義指令
const directives = {
  copy,
}
export default {
  install(Vue) {
    Object.keys(directives).forEach((key) => {
      Vue.directive(key, directives[key])
    })
  },

5.全局進行遍歷注冊,main.js.Vue.use函數會調用我們寫好的install,相當于運行我們install里面的代碼

import Vue from 'vue'
import Directives from '@/directive'
Vue.use(Directives)

到此這篇關于Vue自定義指令深入探討實現的文章就介紹到這了,更多相關Vue自定義指令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue自定義指令介紹(2)

    Vue自定義指令介紹(2)

    這篇文章主要為大家詳細介紹了Vue自定義指令,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 解決vue中的無限循環(huán)問題

    解決vue中的無限循環(huán)問題

    這篇文章主要介紹了解決vue中的無限循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue 實現拖動滑塊驗證功能(只有css+js沒有后臺驗證步驟)

    Vue 實現拖動滑塊驗證功能(只有css+js沒有后臺驗證步驟)

    這篇文章給大家介紹了基于vue實現拖動滑塊驗證功能,代碼引用css與js都是線上的,將代碼全部復制到一個html中可以直接打開,超級簡單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-08-08
  • 解決Echarts 顯示隱藏后寬度高度變小的問題

    解決Echarts 顯示隱藏后寬度高度變小的問題

    這篇文章主要介紹了解決Echarts 顯示隱藏后寬度高度變小的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue3 setup中defineEmits與defineProps的使用案例詳解

    vue3 setup中defineEmits與defineProps的使用案例詳解

    在父組件中定義String、Number、Boolean、Array、Object、Date、Function、Symbol這些類型的數據,使用defineEmits會返回一個方法,使用一個變量emits(變量名隨意)去接收,本文給大家介紹vue3 setup中defineEmits與defineProps的使用案例,感興趣的朋友一起看看吧
    2023-10-10
  • 解決vue中修改export default中腳本報一大堆錯的問題

    解決vue中修改export default中腳本報一大堆錯的問題

    今天小編就為大家分享一篇解決vue中修改export default中腳本報一大堆錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue-cli3 $ is not defined錯誤問題及解決

    Vue-cli3 $ is not defined錯誤問題及解決

    這篇文章主要介紹了Vue-cli3 $ is not defined錯誤問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決前后端分離 vue+springboot 跨域 session+cookie失效問題

    解決前后端分離 vue+springboot 跨域 session+cookie失效問題

    這篇文章主要介紹了前后端分離 vue+springboot 跨域 session+cookie失效問題的解決方法,解決過程也很簡單 ,需要的朋友可以參考下
    2019-05-05
  • Vue實現table列表項上下移動的示例代碼

    Vue實現table列表項上下移動的示例代碼

    本文主要介紹了Vue實現table列表項上下移動的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Vue實現多個關鍵詞高亮顯示功能

    Vue實現多個關鍵詞高亮顯示功能

    在現代網頁開發(fā)中,常常需要實現高亮顯示關鍵詞的功能,這篇文章將探討如何通過?Vue.js?中的?highlightText來實現這一功能,感興趣的可以了解下
    2024-12-12

最新評論

和硕县| 大渡口区| 高青县| 温泉县| 随州市| 彰武县| 镇原县| 卓资县| 疏附县| 澄迈县| 桓台县| 静海县| 承德县| 阳朔县| 县级市| 衡阳县| 达拉特旗| 元阳县| 汶上县| 奉化市| 邯郸县| 中山市| 汽车| 延吉市| 景泰县| 长乐市| 凤冈县| 洛扎县| 屏东县| 新绛县| 永新县| 英山县| 惠东县| 弋阳县| 新昌县| 泰州市| 明光市| 望奎县| 玛曲县| 昭平县| 宜兴市|