免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

vue自定義指令使用的方法是什么

這篇“vue自定義指令使用的方法是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue自定義指令使用的方法是什么”文章吧。

創(chuàng)新互聯(lián)是一家專業(yè)提供上思企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為上思眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

自定義指令

除了 Vue 內(nèi)置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 還允許你注冊(cè)自定義的指令 (Custom Directives)。

兩種在 Vue 中重用代碼的方式:組件和組合式函數(shù)。組件是主要的構(gòu)建模塊,而組合式函數(shù)則側(cè)重于有狀態(tài)的邏輯。另一方面,自定義指令主要是為了重用涉及普通元素的底層 DOM 訪問的邏輯。

一個(gè)自定義指令由一個(gè)包含類似組件生命周期鉤子的對(duì)象來定義。鉤子函數(shù)會(huì)接收到指令所綁定元素作為其參數(shù)。

Quick Start

Vue 自定義指令有全局注冊(cè)局部注冊(cè)兩種方式。

先來看看注冊(cè)全局指令的方式,通過 Vue.directive( id, [definition] )方式注冊(cè)全局指令。然后在入口文件中進(jìn)行 Vue.use()調(diào)用。

批量注冊(cè)指令,新建 src/directives/index.js 文件:

import fitColumns from './fit-columns'
import enterToInput from './enter-to-input'
import resizeHeight from './resize-height'
import resizeWidth from './resize-width'
import inputFilter from './input-filter'
import copy from './copy'
import longpress from './longpress'
import clickOutside from './click-outside'
import emoji from './emoji'

const directives = {
  fitColumns,
  enterToInput,
  resizeHeight,
  resizeWidth,
  inputFilter,
  copy,
  longpress,
  clickOutside,
  emoji
}

export default {
  install(Vue) {
    Object.keys(directives).forEach((key) => {
      Vue.directive(key, directives[key])
    })
  }
}

在 main.js 引入并調(diào)用:

// .....

import Directives from '@/directives'
Vue.use(Directives)

//.....

接下來就要開發(fā)具體的自定義指令了,那么開發(fā)的要領(lǐng),以及一些開發(fā)技術(shù)點(diǎn)還是要先贅述一遍。

Vue2版本: 一個(gè)指令定義對(duì)象可以提供如下幾個(gè)鉤子函數(shù) (均為可選):

  • bind:只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用。在這里可以進(jìn)行一次性的初始化設(shè)置。

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

  • update:所在組件的 VNode 更新時(shí)調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新。

  • componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。

  • unbind:只調(diào)用一次,指令與元素解綁時(shí)調(diào)用。

指令鉤子函數(shù)會(huì)被傳入以下參數(shù)

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

  • binding:一個(gè)對(duì)象,包含以下 property:

    • name:指令名,不包括 v- 前綴。

    • value:指令的綁定值,例如:v-my-directive="1 + 1" 中,綁定值為 2

    • oldValue:指令綁定的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。

    • expression:字符串形式的指令表達(dá)式。例如 v-my-directive="1 + 1" 中,表達(dá)式為 "1 + 1"

    • arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"

    • modifiers:一個(gè)包含修飾符的對(duì)象。例如:v-my-directive.foo.bar 中,修飾符對(duì)象為 { foo: true, bar: true }

  • vnode:Vue 編譯生成的虛擬節(jié)點(diǎn)。移步 VNode API 來了解更多詳情。

  • oldVnode:上一個(gè)虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。

Tips:除了 el 之外,其它參數(shù)都應(yīng)該是只讀的,切勿進(jìn)行修改。如果需要在鉤子之間共享數(shù)據(jù),建議通過元素的 dataset 來進(jìn)行。

Vue3版本:有稍微變化,由于本文主要說的都是 Vue2 版本的(也是手上很多 vue2 版本的老項(xiàng)目在維護(hù))

實(shí)戰(zhàn)

vue自定義指令使用的方法是什么

以下都是我在項(xiàng)目中用到的自定義指令,特此分享出來,供大家參考。同時(shí)也不敢保證 100% 無bug,如果在您的使用場(chǎng)景中如有 bug,還望留言批評(píng)指導(dǎo)。

1、click-outside.js

場(chǎng)景:clickOutside 自定義指令可以應(yīng)用于需要在點(diǎn)擊元素外部時(shí)觸發(fā)某些操作的場(chǎng)景,例如:

  • 點(diǎn)擊外部關(guān)閉彈窗:當(dāng)用戶點(diǎn)擊彈窗外部時(shí),需要關(guān)閉彈窗并執(zhí)行一些操作,例如清空輸入框、重置表單等。

  • 點(diǎn)擊外部隱藏下拉菜單:當(dāng)用戶點(diǎn)擊下拉菜單外部時(shí),需要隱藏下拉菜單并執(zhí)行一些操作,例如清空搜索框、重置篩選條件等。

  • 點(diǎn)擊外部取消選中狀態(tài):當(dāng)用戶點(diǎn)擊選中元素外部時(shí),需要取消選中狀態(tài)并執(zhí)行一些操作,例如清空選中項(xiàng)、重置狀態(tài)等。

總之,clickOutside 自定義指令可以幫助我們實(shí)現(xiàn)一些常見的交互需求,提升用戶體驗(yàn)和操作效率。

const clickOutside = {
  bind: function(el, binding, vnode) {
    el.clickOutsideEvent = function(event) {
      if (!(el === event.target || el.contains(event.target))) {
        vnode.context[binding.expression](event)
      }
    }
    document.body.addEventListener('click', el.clickOutsideEvent)
  },
  unbind: function(el) {
    document.body.removeEventListener('click', el.clickOutsideEvent)
  }
}

export default clickOutside

2、copy.js

場(chǎng)景: copy 自定義指令可以應(yīng)用于需要實(shí)現(xiàn)一鍵復(fù)制文本內(nèi)容的場(chǎng)景,例如:

  • 復(fù)制分享鏈接:當(dāng)用戶點(diǎn)擊分享按鈕時(shí),需要將當(dāng)前頁(yè)面的分享鏈接復(fù)制到剪貼板中,方便用戶分享給其他人。

  • 復(fù)制優(yōu)惠碼:當(dāng)用戶點(diǎn)擊領(lǐng)取優(yōu)惠券按鈕時(shí),需要將優(yōu)惠碼復(fù)制到剪貼板中,方便用戶在購(gòu)物時(shí)使用。

  • 復(fù)制代碼片段:當(dāng)用戶需要復(fù)制代碼片段時(shí),可以通過點(diǎn)擊復(fù)制按鈕,將代碼片段復(fù)制到剪貼板中,方便用戶在編輯器中粘貼使用。

總之,copy 自定義指令可以幫助我們實(shí)現(xiàn)一些常見的復(fù)制操作,提升用戶體驗(yàn)和操作效率。

const copy = {
  bind: function(el, binding) {
    el.addEventListener('click', function() {
      const textToCopy = binding.value
      const input = document.createElement('input')
      input.setAttribute('value', textToCopy)
      document.body.appendChild(input)
      input.select()
      document.execCommand('copy')
      document.body.removeChild(input)
    })
  }
}

export default copy

3、emoji.js

場(chǎng)景: emoji 自定義指令可以應(yīng)用于需要在輸入框中插入表情符號(hào)的場(chǎng)景,例如:

  • 發(fā)送表情消息:當(dāng)用戶在聊天應(yīng)用中發(fā)送消息時(shí),可以通過點(diǎn)擊表情按鈕,在輸入框中插入表情符號(hào),豐富聊天內(nèi)容。

  • 評(píng)論點(diǎn)贊:當(dāng)用戶在社交應(yīng)用中對(duì)評(píng)論進(jìn)行點(diǎn)贊時(shí),可以通過點(diǎn)擊點(diǎn)贊按鈕,在評(píng)論框中插入點(diǎn)贊表情符號(hào),表達(dá)自己的情感。

  • 表情搜索:當(dāng)用戶需要在輸入框中插入特定的表情符號(hào)時(shí),可以通過輸入表情名稱或關(guān)鍵字,篩選出符合條件的表情符號(hào),方便用戶選擇使用。

總之,emoji 自定義指令可以幫助我們實(shí)現(xiàn)在輸入框中插入表情符號(hào)的功能,提升用戶體驗(yàn)和操作效率。

// 在指令的inserted鉤子函數(shù)中,定義一個(gè)正則表達(dá)式,用來匹配表情及特殊字符。
// 在指令的update鉤子函數(shù)中,判斷輸入框的值是否發(fā)生變化,如果變化了,則使用正則表達(dá)式來過濾輸入框的值。
// 在指令的unbind鉤子函數(shù)中,清除事件監(jiān)聽器,避免內(nèi)存泄漏。
const emoji = {
  inserted: function(el) {
    el.addEventListener('input', function() {
      const reg = /[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDFFF]|[\u200D\uFE0F\uFE00-\uFE0F]/g
      el.value = el.value.replace(reg, '')
    })
  },
  update: function(el) {
    const reg = /[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDFFF]|[\u200D\uFE0F\uFE00-\uFE0F]/g
    el.value = el.value.replace(reg, '')
  },
  unbind: function(el) {
    el.removeEventListener('input')
  }
}

export default emoji

4、enter-to-input.js

場(chǎng)景: enter-to-input 自定義指令可以應(yīng)用于需要在輸入框中按下回車鍵時(shí)觸發(fā)特定操作的場(chǎng)景,例如:

  • 搜索框回車搜索:當(dāng)用戶在搜索框中輸入關(guān)鍵字后,按下回車鍵時(shí),可以觸發(fā)搜索操作,快速獲取搜索結(jié)果。

  • 發(fā)送消息:當(dāng)用戶在聊天應(yīng)用中輸入完消息后,按下回車鍵時(shí),可以觸發(fā)發(fā)送消息操作,方便快捷地發(fā)送消息。

  • 提交表單:當(dāng)用戶在表單中填寫完信息后,按下回車鍵時(shí),可以觸發(fā)提交表單操作,快速提交表單信息。

總之,enter-to-input 自定義指令可以幫助我們實(shí)現(xiàn)在輸入框中按下回車鍵時(shí)觸發(fā)特定操作的功能,提升用戶體驗(yàn)和操作效率。

const enterToInput = {
  inserted: function(el) {
    let inputs = el.querySelectorAll('input')
    // 綁定回寫事件
    for (var i = 0; i < inputs.length; i++) {
      inputs[i].setAttribute('keyFocusIndex', i)
      inputs[i].addEventListener('keyup', ev => {
        if (ev.keyCode === 13) {
          const targetTo = ev.srcElement.getAttribute('keyFocusTo')
          if (targetTo) {
            this.$refs[targetTo].$el.focus()
          } else {
            var attrIndex = ev.srcElement.getAttribute('keyFocusIndex')
            var ctlI = parseInt(attrIndex)
            inputs = el.querySelectorAll('input')
            if (ctlI < inputs.length - 1) inputs[ctlI + 1].focus()
          }
        }
      })
    }
  }
}

export default enterToInput

5、fit-columns.js

場(chǎng)景: fit-columns 自定義指令可以應(yīng)用于需要自動(dòng)調(diào)整表格列寬的場(chǎng)景,例如:

  • 數(shù)據(jù)展示:當(dāng)我們需要在頁(yè)面上展示大量數(shù)據(jù)時(shí),可以使用表格進(jìn)行展示,通過 fit-columns 自定義指令可以自動(dòng)調(diào)整表格列寬,使得數(shù)據(jù)更加清晰易讀。

  • 數(shù)據(jù)編輯:當(dāng)我們需要在頁(yè)面上編輯表格數(shù)據(jù)時(shí),可以使用表格進(jìn)行編輯,通過 fit-columns 自定義指令可以自動(dòng)調(diào)整表格列寬,使得編輯更加方便快捷。

  • 數(shù)據(jù)導(dǎo)出:當(dāng)我們需要將表格數(shù)據(jù)導(dǎo)出為 Excel 或 CSV 格式時(shí),可以使用表格進(jìn)行導(dǎo)出,通過 fit-columns 自定義指令可以自動(dòng)調(diào)整表格列寬,使得導(dǎo)出的數(shù)據(jù)更加美觀。

總之,fit-columns 自定義指令可以幫助我們實(shí)現(xiàn)自動(dòng)調(diào)整表格列寬的功能,提升數(shù)據(jù)展示、編輯和導(dǎo)出的效率和美觀度。

import './fit-columns.css'

function adjustColumnWidth(table, padding = 0) {
  const colgroup = table.querySelector('colgroup')
  const colDefs = [...colgroup.querySelectorAll('col')]
  colDefs.forEach((col) => {
    const clsName = col.getAttribute('name')
    const clsWidth = col.getAttribute('width')
    if (clsWidth < 200) return
    const cells = [
      ...table.querySelectorAll(`td.${clsName}`),
      ...table.querySelectorAll(`th.${clsName}`)
    ]
    if (cells[0] && cells[0].classList && cells[0].classList.contains && cells[0].classList.contains('leave-alone')) {
      return
    }
    const widthList = cells.map((el) => {
      return el.querySelector('.cell') && el.querySelector('.cell').scrollWidth || 0
    })
    const max = Math.max(...widthList)
    table.querySelectorAll(`col[name=${clsName}]`).forEach((el) => {
      // console.log(222, max + padding)
      el.setAttribute('width', max + padding > 500 ? 500 : max + padding)
    })
  })
}

const fitColumns = {
  update() { },
  bind() { },
  inserted(el, binding) {
    setTimeout(() => {
      adjustColumnWidth(el, binding.value)
    }, 300)
  },
  componentUpdated(el, binding) {
    el.classList.add('r-table')
    setTimeout(() => {
      adjustColumnWidth(el, binding.value)
    }, 300)
  },
  unbind() { }
}

export default fitColumns

5.1、fit-columns.css

.el-table.r-table .cell {
  display: inline-block;
  /* white-space: nowrap; */
  width: auto;
  overflow: auto;
}

.el-table.r-table .el-table__body-wrapper {
  overflow-x: auto;
}

6、input-filter.js

場(chǎng)景: input-filter 自定義指令可以應(yīng)用于需要對(duì)用戶輸入進(jìn)行過濾和限制的場(chǎng)景,例如:

  • 輸入框過濾:當(dāng)我們需要在輸入框中輸入特定類型的數(shù)據(jù)時(shí),可以使用 input-filter 自定義指令對(duì)用戶輸入進(jìn)行過濾和限制,例如只允許輸入數(shù)字、字母或特定字符等。

  • 表單驗(yàn)證:當(dāng)我們需要對(duì)表單中的數(shù)據(jù)進(jìn)行驗(yàn)證時(shí),可以使用 input-filter 自定義指令對(duì)用戶輸入進(jìn)行過濾和限制,例如驗(yàn)證手機(jī)號(hào)碼、郵箱地址等。

  • 密碼輸入:當(dāng)我們需要用戶輸入密碼時(shí),可以使用 input-filter 自定義指令對(duì)用戶輸入進(jìn)行過濾和限制,例如限制密碼長(zhǎng)度、只允許輸入特定字符等。

總之,input-filter 自定義指令可以幫助我們實(shí)現(xiàn)對(duì)用戶輸入進(jìn)行過濾和限制的功能,提升表單驗(yàn)證和數(shù)據(jù)輸入的效率和準(zhǔn)確性。

const findEle = (parent, type) => {
  return parent.tagName.toLowerCase() === type
    ? parent
    : parent.querySelector(type)
}

const trigger = (el, type) => {
  const e = document.createEvent('HTMLEvents')
  e.initEvent(type, true, true)
  el.dispatchEvent(e)
}

const inputFilter = {
  mounted(el, binding, vnode) {
    const bindV = binding.value
    const regRule = bindV.regRule ? bindV.regRule : /[^\a-zA-Z0-9\u4E00-\u9FA5]+$/g
    const length = bindV.length ? bindV.length : 30
    const $inp = findEle(el, 'input')
    el.$inp = $inp
    $inp.handle = () => {
      const val = $inp.value
      $inp.value = val.replace(regRule, '').substring(0, length)

      trigger($inp, 'input')
    }
    $inp.addEventListener('keyup', $inp.handle)
  },
  unmounted(el) {
    el.$inp.removeEventListener('keyup', el.$inp.handle)
  }
}

export default inputFilter

7、longpress.js

場(chǎng)景: longpress 自定義指令可以應(yīng)用于需要長(zhǎng)按觸發(fā)事件的場(chǎng)景,例如:

按鈕長(zhǎng)按:當(dāng)我們需要在按鈕上長(zhǎng)按觸發(fā)某個(gè)事件時(shí),可以使用 longpress 自定義指令,例如長(zhǎng)按刪除按鈕可以刪除某個(gè)元素。 圖片預(yù)覽:當(dāng)我們需要在圖片上長(zhǎng)按觸發(fā)預(yù)覽事件時(shí),可以使用 longpress 自定義指令,例如長(zhǎng)按圖片可以彈出預(yù)覽框。 列表操作:當(dāng)我們需要在列表中長(zhǎng)按觸發(fā)某個(gè)操作時(shí),可以使用 longpress 自定義指令,例如長(zhǎng)按列表項(xiàng)可以彈出操作菜單。

總之,longpress 自定義指令可以幫助我們實(shí)現(xiàn)長(zhǎng)按觸發(fā)事件的功能,提升用戶體驗(yàn)和操作效率。

// 在 bind 鉤子函數(shù)中綁定了 mousedown、touchstart、click、mouseout、touchend 和 touchcancel 事件。
// 當(dāng)用戶按下鼠標(biāo)或觸摸屏?xí)r,我們會(huì)啟動(dòng)一個(gè)定時(shí)器,如果在指定的時(shí)間內(nèi)沒有松開鼠標(biāo)或手指,則執(zhí)行指令的回調(diào)函數(shù)。
// 如果用戶在指定的時(shí)間內(nèi)松開了鼠標(biāo)或手指,則取消定時(shí)器。
const longpress = {
  bind: function(el, binding) {
    let pressTimer = null
    const duration = binding.value || 500 // 默認(rèn)長(zhǎng)按時(shí)間為 500ms

    const start = function(event) {
      if (event.type === 'click' && event.button !== 0) {
        return
      }

      if (pressTimer === null) {
        pressTimer = setTimeout(() => {
          handler()
        }, duration)
      }
    }

    const cancel = function() {
      if (pressTimer !== null) {
        clearTimeout(pressTimer)
        pressTimer = null
      }
    }

    const handler = function() {
      binding.value()
    }

    el.addEventListener('mousedown', start)
    el.addEventListener('touchstart', start)

    el.addEventListener('click', cancel)
    el.addEventListener('mouseout', cancel)
    el.addEventListener('touchend', cancel)
    el.addEventListener('touchcancel', cancel)
  }
}

export default longpress

8、resize-height.js

場(chǎng)景: resize-height 自定義指令可以應(yīng)用于需要根據(jù)內(nèi)容自適應(yīng)高度的場(chǎng)景,例如:

  • 文本框自適應(yīng)高度:當(dāng)我們需要在文本框中輸入多行文本時(shí),可以使用 resize-height 自定義指令,使文本框根據(jù)內(nèi)容自適應(yīng)高度,避免內(nèi)容溢出或留白。

  • 評(píng)論框自適應(yīng)高度:當(dāng)我們需要在評(píng)論框中輸入多行文本時(shí),可以使用 resize-height 自定義指令,使評(píng)論框根據(jù)內(nèi)容自適應(yīng)高度,提升用戶體驗(yàn)和操作效率。

  • 動(dòng)態(tài)列表自適應(yīng)高度:當(dāng)我們需要在動(dòng)態(tài)列表中展示不同高度的內(nèi)容時(shí),可以使用 resize-height 自定義指令,使列表項(xiàng)根據(jù)內(nèi)容自適應(yīng)高度,避免內(nèi)容溢出或留白。

總之,resize-height 自定義指令可以幫助我們實(shí)現(xiàn)根據(jù)內(nèi)容自適應(yīng)高度的功能,提升用戶體驗(yàn)和界面美觀度。

const resizeHeight = {
  // 綁定時(shí)調(diào)用
  bind(el, binding) {
    let height = ''
    function isResize() {
      // 可根據(jù)需求,調(diào)整內(nèi)部代碼,利用 binding.value 返回即可
      const style = document.defaultView.getComputedStyle(el)
      if (height !== style.height) {
        // 此處關(guān)鍵代碼,通過此處代碼將數(shù)據(jù)進(jìn)行返回,從而做到自適應(yīng)
        binding.value({ height: style.height })
      }
      height = style.height
    }
    // 設(shè)置調(diào)用函數(shù)的延時(shí),間隔過短會(huì)消耗過多資源
    el.__vueSetInterval__ = setInterval(isResize, 100)
  },
  unbind(el) {
    clearInterval(el.__vueSetInterval__)
  }
}

export default resizeHeight

9、resize-width.js

場(chǎng)景: resize-width 自定義指令可以應(yīng)用于需要根據(jù)內(nèi)容自適應(yīng)寬度的場(chǎng)景,例如:

  • 圖片自適應(yīng)寬度:當(dāng)我們需要在頁(yè)面中展示不同寬度的圖片時(shí),可以使用 resize-width 自定義指令,使圖片根據(jù)內(nèi)容自適應(yīng)寬度,避免圖片變形或溢出。

  • 表格自適應(yīng)寬度:當(dāng)我們需要在頁(yè)面中展示不同寬度的表格時(shí),可以使用 resize-width 自定義指令,使表格根據(jù)內(nèi)容自適應(yīng)寬度,避免表格變形或溢出。

  • 動(dòng)態(tài)列表自適應(yīng)寬度:當(dāng)我們需要在動(dòng)態(tài)列表中展示不同寬度的內(nèi)容時(shí),可以使用 resize-width 自定義指令,使列表項(xiàng)根據(jù)內(nèi)容自適應(yīng)寬度,避免內(nèi)容變形或溢出。

總之,resize-width 自定義指令可以幫助我們實(shí)現(xiàn)根據(jù)內(nèi)容自適應(yīng)寬度的功能,提升用戶體驗(yàn)和界面美觀度。

const resizeWidth = {
  // 綁定時(shí)調(diào)用
  bind(el, binding) {
    let width = ''
    function isResize() {
      // 可根據(jù)需求,調(diào)整內(nèi)部代碼,利用binding.value返回即可
      const style = document.defaultView.getComputedStyle(el)
      if (width !== style.width) {
        // 此處關(guān)鍵代碼,通過此處代碼將數(shù)據(jù)進(jìn)行返回,從而做到自適應(yīng)
        binding.value({ width: style.width })
      }
      width = style.width
    }
    // 設(shè)置調(diào)用函數(shù)的延時(shí),間隔過短會(huì)消耗過多資源
    el.__vueSetInterval__ = setInterval(isResize, 100)
  },
  unbind(el) {
    clearInterval(el.__vueSetInterval__)
  }
}

export default resizeWidth

原理

Vue2 自定義指令的原理可以簡(jiǎn)單概括為:通過 Vue.directive() 方法注冊(cè)指令,當(dāng)指令被綁定到元素上時(shí),Vue 會(huì)創(chuàng)建一個(gè)指令實(shí)例,該實(shí)例包含指令的鉤子函數(shù)和其他配置項(xiàng),然后根據(jù)指令的生命周期鉤子函數(shù),依次執(zhí)行相應(yīng)的邏輯,例如 bind、inserted、update、componentUpdated 和 unbind 等。

具體來說,Vue2 自定義指令的原理包括以下幾個(gè)方面:

  • 注冊(cè)指令:通過 Vue.directive() 方法注冊(cè)指令,該方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是指令名稱,第二個(gè)參數(shù)是一個(gè)對(duì)象,包含指令的鉤子函數(shù)和其他配置項(xiàng)。

  • 創(chuàng)建指令實(shí)例:當(dāng)指令被綁定到元素上時(shí),Vue 會(huì)創(chuàng)建一個(gè)指令實(shí)例,該實(shí)例包含指令的鉤子函數(shù)和其他配置項(xiàng)。

  • 指令鉤子函數(shù)執(zhí)行:當(dāng)指令實(shí)例被創(chuàng)建后,Vue 會(huì)根據(jù)指令的生命周期鉤子函數(shù),依次執(zhí)行相應(yīng)的邏輯,例如 bind、inserted、update、componentUpdated 和 unbind 等。

  • 操作 DOM:在指令鉤子函數(shù)中,我們可以通過 el 參數(shù)獲取到指令綁定的元素,然后對(duì)元素進(jìn)行操作,例如修改元素的樣式、屬性或內(nèi)容等。

  • 注銷指令:當(dāng)指令被解綁或元素被銷毀時(shí),Vue 會(huì)調(diào)用指令的 unbind 鉤子函數(shù),我們可以在該函數(shù)中清除指令創(chuàng)建的事件監(jiān)聽器、定時(shí)器或其他資源。

總之,Vue2 自定義指令的原理是通過注冊(cè)指令、創(chuàng)建指令實(shí)例、執(zhí)行指令鉤子函數(shù)、操作 DOM 和注銷指令等步驟來實(shí)現(xiàn)的,通過這些步驟,我們可以實(shí)現(xiàn)各種自定義指令的功能。

以上就是關(guān)于“vue自定義指令使用的方法是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:vue自定義指令使用的方法是什么
URL地址:http://newbst.com/article26/jhcpcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈小程序開發(fā)網(wǎng)站改版網(wǎng)站營(yíng)銷品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)