国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3:有關(guān)v-model的用法

這篇具有很好參考價(jià)值的文章主要介紹了Vue3:有關(guān)v-model的用法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

前言:

回憶基本的原生用法:

原生input的封裝:

自定義v-model參數(shù):

對(duì)el-input的二次封裝:

多個(gè)v-model進(jìn)行綁定:

v-model修飾符:

v-model自定義參數(shù)與自定義修飾符的結(jié)合:


Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

前言:

? ? ? ? 提起v-model,想必都不陌生,作為vue的經(jīng)典語(yǔ)法,幫助我們?cè)诰帉戫?xiàng)目的時(shí)候,省了很多很多的事情,本文著重記錄v-model在組件上的綁定使用!

回憶基本的原生用法:

使用原生的input,我們一般這么寫:

<input type="text" v-model="name">

此種寫法相當(dāng)于以下寫法:

<input type="text" :value="name" @input="e=> name = e.target.value">
<input type="text" :value="name" @input="name = $event.target.value">

?而當(dāng)我們?cè)谝粋€(gè)組件上使用v-model的寫法時(shí),實(shí)際寫法時(shí)長(zhǎng)這個(gè)樣子:

<custom-input :model-value="name" @update:modelValue="newValue=>name = newValue"></custom-input>

請(qǐng)注意model-value與@update:modelValue并不是我規(guī)定的,而是vue規(guī)定的!

于是乎,我們?nèi)绻雽懗蛇@樣使用,那就需要將組件內(nèi)部的input value值與modelValue進(jìn)行綁定。

當(dāng)原生的input時(shí)間觸發(fā)時(shí),利用@update:modelValue將新值攜帶出去!

<custom-input v-model="name"></custom-input>

原生input的封裝:

<template>
	<div>modelValue: <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)"></div>
</template>

<script setup>
	import { defineProps, defineEmits } from "vue"

	const props = defineProps(['modelValue'])
	const emit = defineEmits(['update:modelValue'])
</script>

或者另一種寫法:

<template>
	<div>modelValue: <input v-model="value"></div>
</template>

<script setup>
	import {defineProps,defineEmits,computed} from "vue"

	const props = defineProps(['modelValue'])
	const emit = defineEmits(['update:modelValue'])

	const value = computed({
		get() {
			return props.modelValue
		},
		set(value) {
			emit('update:modelValue', value)
		}
	})
</script>

兩種寫法都可,這樣我們就可以引入我們的自定義的組件,采用如此寫法

<template>
	<custom-input v-model="name"></custom-input>
	<div>name:{{name}}</div>
</template>

<script setup>
    import {ref} from "vue";
	import CustomInput from "./components/custom-input/index.vue";
	
	const name = ref('')
</script>

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

自定義v-model參數(shù):

在默認(rèn)的情況下,組件的都是使用modelValue作為自己的prop,使用update:modelValue作為對(duì)應(yīng)的更新事件,有時(shí)候我們需要去改動(dòng)一哈!

基本規(guī)則就是,自定義的prop:xxx, 對(duì)應(yīng)的更新事件:update:xxx, 組件上就變成了v-model:xxx的寫法,下面以value舉例

<template>
	<div>自定義v-model的參數(shù),例:value: <input :value="value" @input="$emit('update:value', $event.target.value)"></div>
</template>

<script setup>
	import {defineProps,defineEmits} from "vue"

	const props = defineProps(['value'])
	const emit = defineEmits(['update:value'])
</script>

那么我們?cè)诮M件上使用就變成了這樣子:

<custom-input v-model:value="name"></custom-input>

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

所以,當(dāng)我們使用element-plus中的el-input組件時(shí),會(huì)發(fā)現(xiàn)是這樣的寫法

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

當(dāng)使用Naive UI或者Ant Design Vue中的input組件時(shí),會(huì)發(fā)現(xiàn)是這樣寫法

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端?Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

總得來(lái)說(shuō),就是element-plus用了默認(rèn)的,而另外兩個(gè)對(duì)其進(jìn)行了自定義參數(shù),而且參數(shù)是value!

至于另外一種使用computed的寫法,依照最基礎(chǔ)的版本,進(jìn)行編輯即可!

對(duì)el-input的二次封裝:

在正常寫項(xiàng)目的時(shí)候,一般都會(huì)選擇一個(gè)適用項(xiàng)目的ui框架,不管是element-plus或者naive等等,我們不可能說(shuō)自己去寫一個(gè)原生的input組件進(jìn)行封裝,除非你的input長(zhǎng)得特別奇特。。。大部分情況下,我們對(duì)ui組件庫(kù)的組件進(jìn)行二次封裝即可,更多的可能是業(yè)務(wù)上的封裝。

這里以el-input舉例,上面說(shuō)到,el-input其實(shí)是用的默認(rèn)的參數(shù)modelValue,我們通過(guò)閱讀el-input文檔也可以看出來(lái)---el-input;

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

?故,當(dāng)我們?cè)趯?duì)el-input進(jìn)行二次封裝的時(shí)候,需要這么寫:

<template>
	<div>
		modelValue:
		<el-input :model-value="modelValue" @input="$emit('update:modelValue',$event)" />
	</div>
</template>

<script setup>
	import {defineProps,defineEmits} from "vue"

	const props = defineProps(['modelValue'])
	const emit = defineEmits(['update:modelValue'])
</script>

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

如果你是用的Naive UI組件庫(kù),那么在你對(duì)n-input組件進(jìn)行二次封裝的時(shí)候,就需要使用value,update:value了,其他的組件庫(kù)也是如此!

多個(gè)v-model進(jìn)行綁定:

當(dāng)我們?cè)谧远x的組件中寫了多個(gè)輸入框或者是其他之類的表單式組件,那就必須在組件上使用多個(gè)v-model,這個(gè)時(shí)候默認(rèn)的modelValue已經(jīng)不夠我們使用了,所以我們必須要進(jìn)行自定義v-model參數(shù)。很簡(jiǎn)單,寫一起就ok!

<template>
	<div>
		modelValue:
		<el-input :model-value="modelValue" @input="$emit('update:modelValue',$event)" />
	</div>
	<div>
		自定義v-model的參數(shù),例:value:
		<el-input :model-value="value" @input="$emit('update:value',$event)" />
	</div>
</template>

<script setup>
	import {defineProps,defineEmits} from "vue"

	const props = defineProps(['modelValue', 'value'])
	const emit = defineEmits(['update:modelValue', 'update:value'])
</script>
<template>
	<custom-el-input v-model="name" v-model:value="desc"></custom-el-input>
	<div>name:{{name}}</div>
	<div>desc:{{desc}}</div>


</template>

<script setup>
	import CustomElInput from "./components/custom-el-input/index.vue"
	import {ref} from "vue";
	const name = ref('')
	const desc = ref('')
</script>

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

v-model修飾符:

關(guān)于v-model的修飾符,知道有一些內(nèi)置的修飾符,例如.trim,.number之類的。有時(shí)候,我們需要自定義修飾符,看下面的例子!

有個(gè)需求:要求當(dāng)你在輸入框中輸入 “千玨” 二字的時(shí)候,就變成 *** 。此修飾符,我決定命名為.replace,寫出來(lái)的效果是這個(gè)樣子的!

<custom-el-input v-model.replace="name"></custom-el-input>

那么組件內(nèi)部該如何去寫?

首先我們需要在props里面寫上默認(rèn)的modelValue,其次我們還需要添加上modelModifiers,這個(gè)也是默認(rèn)的,和modelValue都是配套的,注意modelModifiers的默認(rèn)值是一個(gè)空對(duì)象!

<template>
	<div>modelValue:
		<el-input :model-value="modelValue" @input="input" />
	</div>
</template>

<script setup>
	import {defineProps,defineEmits} from "vue";
	const props = defineProps({
		modelValue: String,
		modelModifiers: {default: () => ({})}
	})
	const emit = defineEmits(['update:modelValue'])

	/* 將 千玨 關(guān)鍵字代替為 *** 字 */
	const input = (value) => {
		console.log(props);
	}
</script>

打印props可以看到如下內(nèi)容,

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

?當(dāng)我們?cè)诮M件上使用 v-model.replace時(shí),在此處replace為true,那我們就可以愉快的進(jìn)行下一步了,這里我使用了lodash的_replace方法:lodash的_replace

	/* 將 千玨 關(guān)鍵字代替為 *** 字 */
	const input = (value) => {
		const replace = props.modelModifiers.replace
		const keyWord = '千玨'
		const replaceWord = '***'
		if (replace) {
			value = _replace(value, keyWord, replaceWord)
		}
		emit('update:modelValue', value)
	}

頁(yè)面展示就會(huì)長(zhǎng)這個(gè)樣子:***就是千玨了,嘿嘿!

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

v-model自定義參數(shù)與自定義修飾符的結(jié)合:

需求又來(lái)了:當(dāng)我們輸入小寫字母時(shí),自動(dòng)變?yōu)閷?duì)應(yīng)的大寫字母。

對(duì)于此種情況,modelValue與modelModifiers當(dāng)然就不能再用了。此時(shí)的規(guī)則就是,我們自定義一個(gè)參數(shù)xxx,而對(duì)應(yīng)的modelModifiers將變成xxxModifiers,這里以value舉例,props就會(huì)有兩個(gè)參數(shù),value和valueModifiers。

<template>
	<div>自定義v-model的參數(shù),例:value:
		<el-input :model-value="value" @input="input" />
	</div>
</template>

<script setup>
	import {defineProps,defineEmits} from "vue";
	import _toUpper from "lodash/toUpper"
	const props = defineProps({
		value: String,
		valueModifiers: {
			default: () => ({})
		}
	})
	const emit = defineEmits(['update:value'])

	/* 將 小寫字母 轉(zhuǎn)化為 大寫字母 */
	const input = (value) => {
		const toUpper = props.valueModifiers.toUpper
		if (toUpper) {
			value = _toUpper(value)
		}
		emit('update:value', value)
	}
</script>

組件使用:

<custom-el-input v-model:value.toUpper="desc"></custom-el-input>

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端

?此時(shí),我們?nèi)绾屋斎胄懽帜付紩?huì)被自動(dòng)轉(zhuǎn)化為大寫,這就成功了!

Vue3:有關(guān)v-model的用法,vue3,web前端,vue.js,javascript,前端文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752218.html

到了這里,關(guān)于Vue3:有關(guān)v-model的用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue3中l(wèi)和vue2中v-model不同點(diǎn)

    vue2比較讓人詬病的一點(diǎn)就是提供了兩種雙向綁定:v-model和.sync, 在vue3中,去掉了.sync修飾符,只需要使用v-model進(jìn)行雙向綁定即可。 為了讓v-model更好的針對(duì)多個(gè)屬性進(jìn)行雙向綁定(vue2中自定義組件中v-model只能使用一次),vue3做出了以下修改: 1、當(dāng)對(duì)自定義組件使用v-mod

    2024年01月21日
    瀏覽(23)
  • 【Vue技巧】Vue2和Vue3組件上使用v-model的實(shí)現(xiàn)原理

    ChatGPT4.0國(guó)內(nèi)站點(diǎn),支持GPT4 Vision 視覺模型:海鯨AI 在Vue中, v-model 是一個(gè)語(yǔ)法糖,用于在輸入框、選擇框等表單元素上創(chuàng)建雙向數(shù)據(jù)綁定。當(dāng)你在自定義組件中實(shí)現(xiàn) v-model 功能時(shí),你需要理解它背后的原理: v-model 實(shí)際上是一個(gè)屬性和一個(gè)事件的簡(jiǎn)寫。 在 Vue 2.x 中, v-mode

    2024年01月15日
    瀏覽(30)
  • vue3探索——組件通信之v-model父子組件數(shù)據(jù)同步

    再很多場(chǎng)景中,我們可能想在子組件中修改父組件的數(shù)據(jù),但事實(shí)上,vue不推薦我們這么做,因?yàn)閿?shù)據(jù)的修改不容易溯源。 在vue2中,我們使用 .sync 修飾符+自定義事件 \\\'update:xxx\\\' ,來(lái)使父子組件數(shù)據(jù)同步。 這里不作過(guò)多說(shuō)明,有需要請(qǐng)自行了解。 vue3的寫法與vue2基本一致。最

    2024年02月11日
    瀏覽(22)
  • Vue3-在HTML標(biāo)簽、組件標(biāo)簽上使用v-model

    本篇為Vue3學(xué)習(xí)中遇到的v-model相關(guān)的記錄,如有問(wèn)題歡迎指正 v-model通常在input、select等標(biāo)簽上來(lái)實(shí)現(xiàn)數(shù)據(jù)雙向綁定 原理 :v-model通過(guò)給標(biāo)簽value賦值來(lái)實(shí)現(xiàn)? 數(shù)據(jù)—頁(yè)面 的綁定。然后通過(guò)綁定input事件實(shí)現(xiàn) 頁(yè)面—數(shù)據(jù) 的綁定。 原理 :在組件上時(shí),v-model通過(guò) :modelValue 來(lái)進(jìn)行

    2024年01月24日
    瀏覽(26)
  • Vue3.2+TS的組件間的v-model傳值

    組件之間的v-model,為什么可以v-model,大家可以去看看v-model的原理,然后就會(huì)發(fā)現(xiàn)這個(gè)方法一目了然。 父組件 子組件 假如子組件需要按照某個(gè)方法變化,那么可以自己定義,比如需要自增加50

    2024年02月13日
    瀏覽(27)
  • vue項(xiàng)目中對(duì)組件使用v-model綁定值,在vue3中如何更新數(shù)據(jù)

    vue項(xiàng)目中對(duì)組件使用v-model綁定值,在vue3中如何更新數(shù)據(jù)

    在el-form 中 el-form-item 綁定組件進(jìn)行校驗(yàn) 想在表單下面爆紅提示 可以對(duì)組件使用v-model綁定值 vue2 通過(guò)this.$emit(‘input’,value) 更新 v-model值 vue3 通過(guò)this.$emit(‘update:modelValue’ ,value) 更新 v-model值

    2024年02月15日
    瀏覽(20)
  • Vue3 v-model cannot be used on a prop,

    所有的 props 都遵循著 單向綁定 原則,props 因父組件的更新而變化,自然地將新的狀態(tài)向下流往子組件,而不會(huì)逆向傳遞。這避免了子組件意外修改父組件的狀態(tài)的情況,不然應(yīng)用的數(shù)據(jù)流將很容易變得混亂而難以理解。 另外,每次父組件更新后,所有的子組件中的 props 都

    2023年04月23日
    瀏覽(19)
  • Vue3通信方式之defineProps、defineEmits、useAttrs、插件mitt和v-model

    Vue3通信方式之defineProps、defineEmits、useAttrs、插件mitt和v-model

    1、使用defineProps props可以實(shí)現(xiàn)父子組件通信,在vue3中我們可以通過(guò)defineProps獲取父組件傳遞的數(shù)據(jù)。且在組件內(nèi)部不需要引入defineProps方法可以直接使用! 父組件給子組件傳遞數(shù)據(jù) 子組件獲取父組件傳遞數(shù)據(jù):方式1 子組件獲取父組件傳遞數(shù)據(jù):方式2 子組件獲取到props數(shù)據(jù)就可以

    2024年02月11日
    瀏覽(23)
  • Vue3中v-model在原生元素和自定義組件上的使用

    Vue3中v-model在原生元素和自定義組件上的使用

    目錄 前言 一、原生元素上的用法 1.?輸入框(input) 2.?多行文本域(textarea) 3.?單選按鈕(radio) 4.?多選框(checkbox)? 5.?下拉選擇框(select)? 二、自定義組件上的用法 1.?定義一個(gè)名為 modelValue 的 props 屬性和一個(gè)名為 update:modelValue 的事件 2.使用一個(gè)可寫的,同時(shí)具有 getter 和 setter

    2024年02月14日
    瀏覽(50)
  • 【vue3】10-vue組件化額外知識(shí)補(bǔ)充(下)-動(dòng)態(tài)組件-組件緩存-v-model在組件上的應(yīng)用

    【vue3】10-vue組件化額外知識(shí)補(bǔ)充(下)-動(dòng)態(tài)組件-組件緩存-v-model在組件上的應(yīng)用

    切換組件案例: 比如我們現(xiàn)在想要實(shí)現(xiàn)了一個(gè)功能: 點(diǎn)擊一個(gè)tab-bar,切換不同的組件顯示; 這個(gè)案例我們可以通過(guò)兩種不同的實(shí)現(xiàn)思路來(lái)實(shí)現(xiàn): 方式一 :通過(guò)v-if來(lái)判斷,顯示不同的組件; 方式二 :動(dòng)態(tài)組件的方式; 方式一代碼示例: 動(dòng)態(tài)組件方式實(shí)現(xiàn) 動(dòng)態(tài)組件是使用 component組

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包