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

詳解vue如何使用自定義指令

 更新時間:2023年10月09日 16:33:19   作者:想干到35歲的程序猿  
在Vue的模板語法中,我們學(xué)了很多指令,當(dāng)然除了這些指令,Vue也允許我們自己定義自己的指令,所以本文就來和大家聊聊如何使用自定義指令吧

自定義指令到底是什么

首先一定要明白,自定義指令其實就是一個對象!只是該對象中包含了類似組件生命周期鉤子的函數(shù)而已,如created,mounted,該鉤子函數(shù)會收到當(dāng)前DOM元素作為參數(shù),從而可以使用該DOM元素進行操作。

<template>
 <input id="IamInput" v-focus />
</template>
<script setup>
const vFocus = {
  mounted: (el:any) => {
    console.log('el是啥子哦',el);   
    el.focus()
    }
}
//當(dāng)然也可以不寫成箭頭函數(shù)
const vFocus = {
  mounted: function (el: any) {
    console.log('el是啥子哦', el);
    el.focus();
  },
};
</script>

當(dāng)然上面只是局部注冊,我們一般用的是全局注冊,即在main.ts中進行注冊:

const vFocus = {
  mounted: function (el: any) {
    console.log('el是啥子哦', el);
    el.focus();
  },
};
app.directive('focus',vFocus)

自定義指令中的鉤子函數(shù)

自定義指令中提供了許多鉤子函數(shù),我們可以在不同的鉤子函數(shù)中調(diào)用不同的參數(shù)

const myDirective = {
  // 在綁定元素的 attribute 前
  // 或事件監(jiān)聽器應(yīng)用前調(diào)用
  created(el, binding, vnode, prevVnode) {
    // 下面會介紹各個參數(shù)的細(xì)節(jié)
  },
  // 在元素被插入到 DOM 前調(diào)用
  beforeMount(el, binding, vnode, prevVnode) {},
  // 在綁定元素的父組件
  // 及他自己的所有子節(jié)點都掛載完成后調(diào)用
  mounted(el, binding, vnode, prevVnode) {},
  // 綁定元素的父組件更新前調(diào)用
  beforeUpdate(el, binding, vnode, prevVnode) {},
  // 在綁定元素的父組件
  // 及他自己的所有子節(jié)點都更新后調(diào)用
  updated(el, binding, vnode, prevVnode) {},
  // 綁定元素的父組件卸載前調(diào)用
  beforeUnmount(el, binding, vnode, prevVnode) {},
  // 綁定元素的父組件卸載后調(diào)用
  unmounted(el, binding, vnode, prevVnode) {}
}

為了容易理解,我們直接用一個案例來學(xué)習(xí)自定義指令即可。

案例

<template>
    <input id="IamInput" v-focus="num" />
    <el-button @click="num++">點擊使得num++</el-button>
</template>
<script lang="ts" setup>
const num=ref(1)
const vFocus = {
  mounted(el: any,binding:any, vnode:any, prevVnode:any) {
    el.value=binding.value //el是DOM元素,el.value就是input框的值,我們在元素掛載時設(shè)置一個默認(rèn)值為1
 },
 updated (el: any,binding:any, vnode:any, prevVnode:any) {
// 我們在元素更新時設(shè)置乘以2倍的操作
console.log('binding',binding);
el.value=binding.value//更新input框的內(nèi)容
 },
};
 //在main.ts中全局掛載
 app.directive('focus',vFocus)
 </script>
  • 該案例非常簡單,大家應(yīng)該一看就明白,首先定義一個input框,然后定義自定義指令,在DOM元素掛載時把binding.value(如官網(wǎng)所說,binging中的value參數(shù)就是傳遞給DOM元素的值,在這里就是num)賦值給el.value,el.value是什么?當(dāng)然就是輸入框的內(nèi)容啦,所有一上來,輸入框中的值就是num的值,即1(注:其實這里一上來是2,因為DOM掛載時mounted和update鉤子都會觸發(fā),會把值*2)
  • 當(dāng)點擊按鈕時,num會+1,由于num變化了,v-focus這個指令中的binging.value也發(fā)生了變化,因此會觸發(fā)自定義指令中的update鉤子,此時我們對其做乘以2的操作,并賦值給輸入框

掛載時

點擊按鈕時

總結(jié)

以前總害怕自定義指令,覺得很難,其實搞懂了發(fā)現(xiàn)很簡單,只不過就是一種封裝的思想,在一個對象中可以拿到當(dāng)前的DOM元素,并對其做操作,該對象中有不同的鉤子供我們使用,就是如此easy~

到此這篇關(guān)于詳解vue如何使用自定義指令的文章就介紹到這了,更多相關(guān)vue自定義指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue去除數(shù)組指定位置元素的幾種方法

    vue去除數(shù)組指定位置元素的幾種方法

    這篇文章主要介紹了vue剔除數(shù)組指定位置元素的幾種方法,文中主要介紹了單個去除和批量去除這兩種方法,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Vue使用輪詢定時發(fā)送請求代碼

    Vue使用輪詢定時發(fā)送請求代碼

    這篇文章主要介紹了Vue使用輪詢定時發(fā)送請求代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue視圖不更新情況詳解

    vue視圖不更新情況詳解

    這篇文章主要介紹了vue視圖不更新情況詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 徹底揭秘keep-alive原理(小結(jié))

    徹底揭秘keep-alive原理(小結(jié))

    這篇文章主要介紹了徹底揭秘keep-alive原理(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 記一次Vue中$route序列號報錯

    記一次Vue中$route序列號報錯

    本文主要介紹了記一次Vue中$route序列號報錯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue基礎(chǔ)知識快速入門教程

    Vue基礎(chǔ)知識快速入門教程

    這篇文章主要介紹了Vue基礎(chǔ)知識快速入門教程,我們可以先學(xué)會用,使用一段時間之后,回頭來熟悉一下Vue框架以及它的特點,需要的朋友可以參考下
    2023-05-05
  • laravel5.4+vue+element簡單搭建的示例代碼

    laravel5.4+vue+element簡單搭建的示例代碼

    本篇文章主要介紹了laravel5.4+vue+element簡單搭建的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Vue.js 實現(xiàn)tab切換并變色操作講解

    Vue.js 實現(xiàn)tab切換并變色操作講解

    這篇文章主要介紹了Vue.js 實現(xiàn)tab切換并變色操作講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • express+vue+mongodb+session 實現(xiàn)注冊登錄功能

    express+vue+mongodb+session 實現(xiàn)注冊登錄功能

    這篇文章主要介紹了express+vue+mongodb+session 實現(xiàn)注冊登錄,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • vue3中的reactive、readonly和shallowReactive使用詳解

    vue3中的reactive、readonly和shallowReactive使用詳解

    在 Vue3 中,可以使用 shallowReactive 函數(shù)創(chuàng)建一個淺層響應(yīng)式對象,它接收一個普通對象作為參數(shù),返回一個淺層響應(yīng)式代理對象,本文給大家介紹vue3中的reactive、readonly和shallowReactive使用,感興趣的朋友跟隨小編一起看看吧
    2024-04-04

最新評論

修武县| 义马市| 肇源县| 和平区| 抚州市| 莫力| 托克逊县| 江孜县| 通道| 阳城县| 嘉祥县| 乾安县| 芜湖县| 梁山县| 榆树市| 庐江县| 宁晋县| 彭水| 榕江县| 工布江达县| 铜山县| 平潭县| 晋中市| 鄯善县| 视频| 名山县| 肥西县| 聂拉木县| 桂平市| 绥德县| 临沂市| 铜山县| 黎平县| 浮山县| 郸城县| 宁明县| 聊城市| 灵丘县| 饶河县| 进贤县| 桐乡市|