一文帶你深入了解V-model實(shí)現(xiàn)數(shù)據(jù)雙向綁定
父組件實(shí)現(xiàn)雙向綁定
在父組件中使用 v-model:
<ChildComponent v-model="message" />
等價(jià)于:
<ChildComponent :modelValue="message" @update:modelValue="val => message = val" />
:modelValue:通過(guò) props 將 message 的值傳遞給子組件。
@update:modelValue:通過(guò) emit 向父組件發(fā)送更新值。
子組件實(shí)現(xiàn)雙向綁定
為了支持父組件的 v-model,子組件需要:
1.定義 props,接收父組件傳遞的數(shù)據(jù)。
2.使用 emit 發(fā)送更新事件。
<script setup> import { defineProps, defineEmits } from 'vue'; // 接收父組件傳遞的 modelValue defineProps({ modelValue: String, // 父組件傳遞的值 }); // 定義更新事件 defineEmits(['update:modelValue']); const updateValue = (newValue) => { // 觸發(fā)事件,通知父組件更新數(shù)據(jù) emit('update:modelValue', newValue); }; </script> <template> <input :value="modelValue" @input="updateValue($event.target.value)" /> </template>
defineModel()
從 Vue 3.4 開(kāi)始,推薦的實(shí)現(xiàn)方式是使用 defineModel()宏
<!-- Child.vue --> <script setup> const model = defineModel() function update() { model.value++ } </script> <template> <div>Parent bound v-model is: {{ model }}</div> <button @click="update">Increment</button> </template>
父組件可以用 v-model 綁定一個(gè)值:
template
<!-- Parent.vue --> <Child v-model="countModel" />
defineModel() 返回的值是一個(gè) ref。它可以像其他 ref 一樣被訪問(wèn)以及修改,不過(guò)它能起到在父組件和當(dāng)前變量之間的雙向綁定的作用:
- 它的 .value 和父組件的 v-model 的值同步;
- 當(dāng)它被子組件變更了,會(huì)觸發(fā)父組件綁定的值一起更新。
這意味著你也可以用 v-model 把這個(gè) ref 綁定到一個(gè)原生 input 元素上,在提供相同的 v-model 用法的同時(shí)輕松包裝原生 input 元素:
<script setup> const model = defineModel() </script> <template> <input v-model="model" /> </template>
底層機(jī)制
defineModel 是一個(gè)便利宏。編譯器將其展開(kāi)為以下內(nèi)容:
一個(gè)名為 modelValue 的 prop,本地 ref 的值與其同步;
一個(gè)名為 update:modelValue 的事件,當(dāng)本地 ref 的值發(fā)生變更時(shí)觸發(fā)。
到此這篇關(guān)于一文帶你深入了解V-model實(shí)現(xiàn)數(shù)據(jù)雙向綁定的文章就介紹到這了,更多相關(guān)V-model數(shù)據(jù)雙向綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue登錄頁(yè)面回車(chē)執(zhí)行事件@keyup.enter.native問(wèn)題
這篇文章主要介紹了vue登錄頁(yè)面回車(chē)執(zhí)行事件@keyup.enter.native問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Vue插件報(bào)錯(cuò):Vue.js is detected on this page.問(wèn)題解決
這篇文章主要介紹了Vue插件報(bào)錯(cuò):Vue.js is detected on this page.問(wèn)題解決,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07vue動(dòng)態(tài)添加store、路由和國(guó)際化配置方式
這篇文章主要介紹了vue動(dòng)態(tài)添加store、路由和國(guó)際化配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03vue時(shí)間戳和時(shí)間的相互轉(zhuǎn)換方式
本文通過(guò)示例代碼介紹了vue時(shí)間戳和時(shí)間的相互轉(zhuǎn)換方式,通過(guò)場(chǎng)景分析介紹了vue3使用組合式api將時(shí)間戳格式轉(zhuǎn)換成時(shí)間格式(2023年09月28日 10:00),感興趣的朋友一起看看吧2023-12-12淺談使用Vue完成移動(dòng)端apk項(xiàng)目
這幾天,我做了一個(gè)vue移動(dòng)端的小項(xiàng)目,本文主要介紹了Vue移動(dòng)端apk項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法
這篇文章主要介紹了vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域 rectangle marker的方法,幫助大家實(shí)現(xiàn)區(qū)域標(biāo)記功能,感興趣的朋友可以了解下2020-10-10完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題
下面小編就為大家分享一篇完美解決axios跨域請(qǐng)求出錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02