Vue3 defineModel的使用示例詳解
基礎(chǔ)配置使用
在vue中,父組件可以在子組件上傳值,子組件通過props接收,但是子組件不可修改props,否則控制臺會報出警告,這也符合vue的單向數(shù)據(jù)流原則,所以如果想要向子組件傳值,并且允許子組件修改的話,一般會這么寫:
<!-- Child.vue -->
<script setup>
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
</script>
<template>
<input
:value="props.modelValue"
@input="emit('update:modelValue', $event.target.value)"
/>
</template>在父組件調(diào)用
<!-- Parent.vue --> <Child :modelValue="foo" @update:modelValue="$event => (foo = $event)" />
而在vue3中,聲明了一種新的傳值方式defineModel,可以更方便的向子組件傳值,并且允許子組件修改傳值,以實現(xiàn)雙向綁定.
<!-- 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>父組件
<!-- Parent.vue --> <Child v-model="countModel" />
defineModel() 返回的值是一個 ref。它可以像其他 ref一樣被訪問以及修改,不過它能起到在父組件和當(dāng)前變量之間的雙向綁定的作用:
- 它的 .value 和父組件的 v-model 的值同步;
- 當(dāng)它被子組件變更了,會觸發(fā)父組件綁定的值一起更新。
defineModel允許配置,可以通過給 defineModel 傳遞選項,來聲明底層 prop 的選項:
// 使 v-model 必填
const model = defineModel({ required: true })
// 提供一個默認(rèn)值
const model = defineModel({ default: 0 })需要注意的是:如果為 defineModel prop 設(shè)置了一個 default 值且父組件沒有為該 prop 提供任何值,會導(dǎo)致父組件與子組件之間不同步。
<!-- Child.vue -->
const model = defineModel({ default: 1 })
<!-- Parent.vue -->
const myRef = ref()
<Child v-model="myRef"></Child>上述代碼中,父組件的 myRef 是 undefined,而子組件的 model 是 1,所以如果設(shè)置初始值,應(yīng)保持二者一致。
配置參數(shù),綁定多個v-model
組件上的 v-model 也可以接受一個參數(shù):
<MyComponent v-model:title="bookTitle" />
<!-- MyComponent.vue -->
<script setup>
const title = defineModel('title')
</script>
<template>
<input type="text" v-model="title" />
</template>如果需要額外的 prop 選項,應(yīng)該在 model 名稱之后傳遞:
const title = defineModel('title', { required: true })綁定多個v-model
<UserName v-model:first-name="first" v-model:last-name="last" />
<script setup>
const firstName = defineModel('firstName')
const lastName = defineModel('lastName')
</script>
<template>
<input type="text" v-model="firstName" />
<input type="text" v-model="lastName" />
</template>到此這篇關(guān)于Vue3 defineModel的使用示例詳解的文章就介紹到這了,更多相關(guān)Vue3 defineModel使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Vue2實現(xiàn)簡易的省市區(qū)縣三級聯(lián)動組件效果
這是一個基于Vue2的簡易省市區(qū)縣三級聯(lián)動組件,可以控制只顯示省級或只顯示省市兩級,可設(shè)置默認(rèn)值等。提供原始省市縣代碼和名稱數(shù)據(jù),適用于各種有關(guān)城市區(qū)縣的應(yīng)用。需要的朋友可以參考下2018-11-11
Vue+better-scroll 實現(xiàn)通訊錄字母索引的示例代碼
通訊錄字母索引是常用的一種功能,本文主要介紹了Vue+better-scroll 實現(xiàn)通訊錄字母索引,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
深入探討Vue3實現(xiàn)多數(shù)據(jù)變化監(jiān)聽的方式
隨著 Vue 3 的發(fā)布,框架帶來了更多的新特性和增強,其中之一就是 watch 函數(shù)的升級,這一改進(jìn)使得多個數(shù)據(jù)的變化偵聽更加優(yōu)雅和靈活,本文將深入探討 Vue 3 中的 watch 函數(shù),以及如何以更加優(yōu)雅的方式實現(xiàn)對多個數(shù)據(jù)變化的監(jiān)聽2023-08-08

