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

Vue在自定義指令綁定的處理函數(shù)中傳遞參數(shù)

 更新時(shí)間:2023年03月10日 14:26:07   作者:June·D  
這篇文章主要介紹了Vue在自定義指令綁定的處理函數(shù)中傳遞參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在自定義指令綁定的處理函數(shù)中傳遞參數(shù)

需求背景

現(xiàn)在需要為自定義指令綁定函數(shù),并且需要向函數(shù)中傳遞參數(shù),類似 v-on="handleFunc(arg1, arg2)"。

Vue 的指令預(yù)期得到的值是一個(gè) JavaScript 表達(dá)式,除了 v-on 和 v-for 這兩個(gè)特殊指令外,其他的指令會(huì)自動(dòng)計(jì)算該表達(dá)式的值,將最終的計(jì)算結(jié)果傳遞給指令。

所以自定義的指令不能用 v-mydirective="handleFunc(arg1, arg2)" 的形式綁定函數(shù)值,因?yàn)?handleFunc(arg1, arg2) 作為一個(gè) JavaScript 表達(dá)式會(huì)被立即執(zhí)行,最終會(huì)將其返回值傳遞給指令。

那么當(dāng)我們想要為自定義指令綁定函數(shù)值,又想為其傳遞參數(shù)該怎么辦呢?

方式一:包裝函數(shù)

利用指令的值預(yù)期得到一個(gè) JavaScript 表達(dá)式的特性,可以為其值綁定一個(gè)包裝后的函數(shù),從而實(shí)現(xiàn)傳遞參數(shù)的目的。如下

<div v-mydirective="() => {handleFunc(arg1, arg2)}"><div>

在上面的示例中,v- mydirective 指令的值是一個(gè)字面量的箭頭函數(shù),該函數(shù)并不會(huì)立即執(zhí)行,因?yàn)楸磉_(dá)式中只是函數(shù)的聲明,并沒(méi)有調(diào)用。利用這種形式,就可以為自定義指令綁定函數(shù)值,并可以向函數(shù)中傳遞參數(shù)。

方式二:利用動(dòng)態(tài)參數(shù)

Vue 從 2.6.0 開(kāi)始,可以用方括號(hào)括起來(lái)的 JavaScript 表達(dá)式作為一個(gè)指令的參數(shù),如下

<a v-bind:[attributeName]="url"> ... </a>
<a v-on:[eventName]="doSomething"> ... </a>

利用動(dòng)態(tài)參數(shù),也可以向指令中傳遞其綁定的函數(shù)所需要的參數(shù),如下

# template
<div v-mydirective:[funcArg]="handleFunc"><div>

# script
export default {
? ? directives: {
? ? ? ? mydirective: {
? ? ? ? ? ? bind(el, binding, vnode) {
? ? ? ? ? ? ? ? let {expression, arg} = binding;
? ? ? ? ? ? ? ? if (expression && vnode.context[expression]) {
? ? ? ? ? ? ? ? ? ? vnode.context[expression](arg);
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? binding.value(arg)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? },
? ? ? ? }
? ? },
? ? data() {
? ? ? ? return {
? ? ? ? ? ? funcArg: {
? ? ? ? ? ? ? ? a: 1,
? ? ? ? ? ? ? ? b: 2,
? ? ? ? ? ? ? ? c: 3
? ? ? ? ? ? },
? ? ? ? }
? ? },
? ? methods: {
?? ? ? ?handleFunc({a, b , c}) {
?? ? ? ??? ?console.log(a, b, c);
?? ? ? ?},
? ? }
}

需要注意的是,利用動(dòng)態(tài)參數(shù)時(shí),handleFunc 只能接收一個(gè)參數(shù),因?yàn)橹噶畹膮?shù)只能傳一個(gè)。

如果需要接收多個(gè)參數(shù),可以像上例一樣,傳個(gè)對(duì)象進(jìn)去,然后在處理函數(shù)中采用解構(gòu)語(yǔ)法接收參數(shù)。

在自定義指令中的傳遞參數(shù)時(shí)value和expression的區(qū)別

在使用Vue的自定義指令的時(shí)候,有時(shí)候會(huì)在調(diào)用binding的value的值的時(shí)候會(huì)發(fā)現(xiàn)值顯示未定義,但是我們確實(shí)傳遞了參數(shù),在查看打印出來(lái)的參數(shù)的時(shí)候會(huì)發(fā)現(xiàn)參數(shù)出現(xiàn)在了expression對(duì)應(yīng)的值中,而不是value,所以這時(shí)候這兩個(gè)參數(shù)的區(qū)別就很有必要探究一下

首先做一個(gè)簡(jiǎn)單的案例來(lái)測(cè)試一下,在我們傳遞一個(gè)參數(shù)的時(shí)候,這兩個(gè)參數(shù)的具體作用和現(xiàn)實(shí)的內(nèi)容:

代碼實(shí)現(xiàn):

<template>
<div>
  <p v-color="color">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

在上面的案例中,我們定義了一個(gè)自定義指令,指令的名字叫做color,并傳遞了一個(gè)參數(shù),參數(shù)是Vue組件中的data節(jié)點(diǎn)中的變量,我們打印了兩個(gè)形參,一個(gè)是掛載的對(duì)象,一個(gè)是用來(lái)接收參數(shù)的binding,下面我們來(lái)看看value和expression中對(duì)應(yīng)的值是什么

顯示效果:

可以看到在expression中的值是color,而在value中存儲(chǔ)的值是red,那么我們就可以知道,expression中存儲(chǔ)的是我們傳遞給指令的參數(shù)的原本的內(nèi)容,是一個(gè)表達(dá)式,而value中的值才是我們真正需要的,這是在傳遞了一個(gè)變量的情況,那如果我們直接傳遞一個(gè)固定的值作為參數(shù)的時(shí)候是什么樣的結(jié)果呢?

代碼實(shí)現(xiàn):

<template>
<div>
  <p v-color="red">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

顯示效果:

可以看到,在我們傳遞了一個(gè)data節(jié)點(diǎn)中不存在的值的時(shí)候,首先會(huì)報(bào)錯(cuò),這個(gè)洋文報(bào)錯(cuò)的大致意思是作為參數(shù)傳遞的這個(gè)變量沒(méi)有定義就被使用了,而且在組件中沒(méi)有這個(gè)變量的其它形式的定義。

意思就是我們明明傳遞了一個(gè)值,但是Vue仍然將其作為一個(gè)表達(dá)式的形式來(lái)解析了,而且可以看到expression中的值是我們傳遞進(jìn)去的參數(shù)的名字,而value中卻沒(méi)有參數(shù),就導(dǎo)致了我們明明傳遞了參數(shù)而value中沒(méi)有任何參數(shù)的問(wèn)題,那么如果我們想要傳遞一個(gè)字面值,而不是作為表達(dá)式的形式被解析的時(shí)候需要怎么做呢?

很簡(jiǎn)單,當(dāng)我們想要傳遞一個(gè)字面值,而希望Vue不要以表達(dá)式的形式去解析的時(shí)候,用單引號(hào)將值包裹起來(lái)就可以作為一個(gè)字符串的字面值的形式進(jìn)行解析了。

代碼實(shí)現(xiàn):

<template>
<div>
  <p v-color="'red'">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

顯示效果:

可以看到,在我們將傳遞的值用單引號(hào)進(jìn)行包含之后,報(bào)錯(cuò)消失了,并且expression中的值是我們傳遞進(jìn)去的帶有單引號(hào)的參數(shù),在value中的參數(shù)是我們真正需要的字面值 

注意點(diǎn)

在傳遞參數(shù)的時(shí)候,如果不加單引號(hào),Vue會(huì)將其以表達(dá)式的方式進(jìn)行解析,會(huì)進(jìn)行運(yùn)算或在data節(jié)點(diǎn)中尋找變量的值,如果沒(méi)有對(duì)應(yīng)的變量值就會(huì)報(bào)錯(cuò),且value中沒(méi)有對(duì)應(yīng)的數(shù)據(jù)。

如果想要將參數(shù)作為普通的字符串進(jìn)行解析的時(shí)候,就需要將參數(shù)使用單引號(hào)進(jìn)行包裹,就可以作為一個(gè)普通的字符串字面值進(jìn)行解析

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決VUE項(xiàng)目在IIS部署出現(xiàn):Uncaught SyntaxError: Unexpected token < 報(bào)錯(cuò)

    解決VUE項(xiàng)目在IIS部署出現(xiàn):Uncaught SyntaxError: Unexpected&n

    這篇文章介紹了解決VUE項(xiàng)目在IIS部署出現(xiàn):Uncaught SyntaxError: Unexpected token < 報(bào)錯(cuò)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • vue中的H5移動(dòng)端項(xiàng)目?真機(jī)測(cè)試配置方式

    vue中的H5移動(dòng)端項(xiàng)目?真機(jī)測(cè)試配置方式

    這篇文章主要介紹了vue中的H5移動(dòng)端項(xiàng)目?真機(jī)測(cè)試配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng)

    vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)按鈕可隨意移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue router 跳轉(zhuǎn)后回到頂部的實(shí)例

    vue router 跳轉(zhuǎn)后回到頂部的實(shí)例

    今天小編就為大家分享一篇vue router 跳轉(zhuǎn)后回到頂部的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vite.config.js或者vue.config.js配置方式

    vite.config.js或者vue.config.js配置方式

    這篇文章主要介紹了vite.config.js或者vue.config.js配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue如何實(shí)現(xiàn)對(duì)請(qǐng)求參數(shù)進(jìn)行簽名

    vue如何實(shí)現(xiàn)對(duì)請(qǐng)求參數(shù)進(jìn)行簽名

    這篇文章主要介紹了vue如何實(shí)現(xiàn)對(duì)請(qǐng)求參數(shù)進(jìn)行簽名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 前端XSS攻擊場(chǎng)景詳解與Vue.js處理XSS的方法(vue-xss)

    前端XSS攻擊場(chǎng)景詳解與Vue.js處理XSS的方法(vue-xss)

    這篇文章主要給大家介紹了關(guān)于前端XSS攻擊場(chǎng)景與Vue.js使用vue-xss處理XSS的方法,介紹了實(shí)際工作中渲染數(shù)據(jù)時(shí)遇到XSS攻擊時(shí)的防范措施,以及解決方案,需要的朋友可以參考下
    2024-02-02
  • Vue綁定class和綁定內(nèi)聯(lián)樣式的實(shí)現(xiàn)方法

    Vue綁定class和綁定內(nèi)聯(lián)樣式的實(shí)現(xiàn)方法

    本文主要介紹了Vue綁定class和綁定內(nèi)聯(lián)樣式的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • vue實(shí)現(xiàn)翻牌動(dòng)畫

    vue實(shí)現(xiàn)翻牌動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)翻牌動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案

    el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案

    本文主要介紹了el-table渲染慢卡頓問(wèn)題最優(yōu)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論