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

vue3利用v-model實(shí)現(xiàn)父子組件之間數(shù)據(jù)同步的代碼詳解

 更新時(shí)間:2024年03月06日 10:09:36   作者:jieyucx  
在Vue 3中,v-model這一指令也得到了升級(jí),使得父子組件之間的數(shù)據(jù)同步變得更加容易和靈活,本文將探討一下Vue 3中如何利用v-model來(lái)實(shí)現(xiàn)父子組件之間的數(shù)據(jù)同步,需要的朋友可以參考下

前言

作為現(xiàn)代前端開(kāi)發(fā)中的重要框架之一,Vue.js一直致力于提供更加方便、高效的數(shù)據(jù)管理方式。在Vue 3中,v-model這一指令也得到了升級(jí),使得父子組件之間的數(shù)據(jù)同步變得更加容易和靈活。本文將探討一下Vue 3中如何利用v-model來(lái)實(shí)現(xiàn)父子組件之間的數(shù)據(jù)同步

一、v-model實(shí)現(xiàn)父子組件之間的數(shù)據(jù)同步

在Vue 3中,可以在<script setup>中使用defineEmits和defineProps來(lái)定義props和event。使用v-model時(shí)需要定義一個(gè)名為modelValue的prop和一個(gè)update:modelValue的event,代碼示例如下:

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

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

const props = defineProps({
  modelValue: {
    type: String,
    default: ''
  }
})

const emits = defineEmits(['update:modelValue'])
</script>

在父組件中使用v-model時(shí),可以通過(guò)v-model:propName綁定子組件的modelValue prop和update:modelValue event。代碼示例如下:

  • 父組件
<template>
  <div>
    <h3>父組件</h3>
    <ChildComponent v-model:modelValue="message" />
    <p>子組件輸入的內(nèi)容:{{ message }}</p>
  </div>
</template>

<script setup>
import ChildComponent from './ChildComponent.vue'

let message = ''
</script>

原理是,在子組件中,v-model會(huì)將modelValue prop和update:modelValue event綁定在一起,當(dāng)子組件的input事件觸發(fā)時(shí)會(huì)emit一個(gè)update:modelValue event,從而更新父組件的message。而在父組件中,v-model會(huì)將messagemodelValue prop和update:modelValue event綁定在一起,當(dāng)父組件更新message時(shí),會(huì)通過(guò)modelValue prop將message傳遞給子組件,在子組件中輸入內(nèi)容時(shí),會(huì)通過(guò)update:modelValue event將新的內(nèi)容傳遞給父組件更新message。這樣就實(shí)現(xiàn)了父子組件之間的數(shù)據(jù)同步。

其中, v-model 相當(dāng)于以下代碼:

<template>
  <ChildComponent :modelValue="message" @update:modelValue="val => message= val"></Child> 
</template>

這樣就可以在父組件和子組件之間實(shí)現(xiàn)雙向數(shù)據(jù)綁定。當(dāng)子組件的值發(fā)生變化時(shí),會(huì)觸發(fā) update 事件傳遞給父組件,父組件接收到事件后會(huì)更新自己的值并重新渲染子組件。當(dāng)父組件的值發(fā)生變化時(shí),會(huì)通過(guò) value prop 傳遞給子組件,子組件接收到 prop 后會(huì)更新自己的值并重新渲染。

二、v-model綁定多個(gè)值

1. 通過(guò)對(duì)象的方式

在Vue3的<script setup>中,可以使用v-model指令實(shí)現(xiàn)父子組件之間的雙向數(shù)據(jù)綁定。如果需要同時(shí)綁定多個(gè)值,可以使用一個(gè)對(duì)象來(lái)存儲(chǔ)這些值,然后在子組件中使用$emit方法將這個(gè)對(duì)象作為參數(shù)傳遞給父組件。

舉個(gè)例子,假設(shè)有一個(gè)父組件Parent和一個(gè)子組件Child,需要同時(shí)綁定一個(gè)名字和年齡??梢栽诟附M件中定義一個(gè)對(duì)象person,然后使用v-model指令來(lái)綁定它:

<template>
  <Child v-model="person"/>
</template>

<script setup>
import Child from './Child.vue'

const person = {
  name: 'John',
  age: 20
}
</script>

在子組件中,可以通過(guò)props接收父組件傳遞過(guò)來(lái)的person對(duì)象,并在模板中使用v-model指令將每個(gè)屬性與輸入框綁定:

<template>
  <div>
    <label>Name:</label>
    <input v-model="person.name">
    <label>Age:</label>
    <input v-model="person.age">
  </div>
</template>

<script setup>
props: {
  modelValue: Object
}

const person = ref(modelValue)

watchEffect(() => {
  emit('update:modelValue', person.value)
})
</script>

注意,在子組件中需要使用props來(lái)接收modelValue,這是v-model指令默認(rèn)傳遞的值。然后將這個(gè)對(duì)象轉(zhuǎn)換為響應(yīng)式對(duì)象,并使用watchEffect函數(shù)監(jiān)聽(tīng)它的變化。調(diào)用emit('update:modelValue', person.value)時(shí)會(huì)將新的person對(duì)象作為參數(shù)傳遞給Parent組件。Parent組件會(huì)自動(dòng)將其更新到person屬性中。

通過(guò)這種方式,可以同時(shí)綁定多個(gè)值,并實(shí)現(xiàn)父子組件之間的雙向數(shù)據(jù)綁定。

2. 使用多個(gè)v-model

在子組件中,可以使用$emit()方法將綁定的值發(fā)送到父組件中,從而實(shí)現(xiàn)父子組件之間的雙向數(shù)據(jù)綁定。具體操作可以參考以下代碼示例:

父組件中使用方式:

<template>
	<h1>父組件中顯示v-model{{pageNo}}{{pageSize}}</h1>
	<Child v-model:pageNo="pageNo" v-model:pageSize="pageSize"></Child>
</template>
<script setup>
import {ref} from 'vue'
//父親的數(shù)據(jù)
let pageNo = ref(1);
let pageSize = ref(3);
</script>

子組件中的代碼示例:

<template>
  <div>
    <p>當(dāng)前頁(yè)數(shù): {{ pageNo }}</p>
    <p>每頁(yè)數(shù)量: {{ pageSize }}</p>
    <button @click="increasePageNo">增加頁(yè)數(shù)</button>
    <button @click="increasePageSize">增加每頁(yè)數(shù)量</button>
  </div>
</template>

<script setup>
	let props = defineProps(["pageNo", "pageSize"]);
	let $emit = defineEmits(["update:pageNo", "update:pageSize"]);

  const increasePageNo = () => {
    const increasedPageNo = parseInt(pageNo) + 1
    $emit('update:pageNo', increasedPageNo)
  }

  const increasePageSize = () => {
    const increasedPageSize = parseInt(pageSize) + 1
    $emit('update:pageSize', increasedPageSize)
  }
</script>

在子組件中,使用defineEmits()函數(shù)定義了兩個(gè)事件,分別是update:pageNoupdate:pageSize,用來(lái)在父組件中更新pageNopageSize的值。同時(shí),也定義了兩個(gè)方法increasePageNoincreasePageSize,用來(lái)修改當(dāng)前頁(yè)數(shù)和每頁(yè)數(shù)量。

在方法中,使用$emit()方法觸發(fā)對(duì)應(yīng)的事件,傳遞修改后的值。父組件通過(guò)v-model綁定子組件中的屬性,當(dāng)子組件修改值時(shí),會(huì)觸發(fā)相應(yīng)的事件,從而更新父組件中對(duì)應(yīng)的值。

三、總結(jié)

Vue3中,通過(guò)v-model我們可以方便地實(shí)現(xiàn)父子組件之間的數(shù)據(jù)雙向綁定。在使用過(guò)程中,需要注意v-mode的本質(zhì)是語(yǔ)法糖,實(shí)際上是通過(guò)propsemit來(lái)實(shí)現(xiàn)數(shù)據(jù)傳遞和事件的觸發(fā)。此外,我們還可以通過(guò).sync修飾符和自定義事件來(lái)實(shí)現(xiàn)類似于v-model的效果。總之,利用v-model實(shí)現(xiàn)父子組件之間的數(shù)據(jù)同步是Vue3中一個(gè)非常實(shí)用且易于上手的特性,值得我們?cè)趯?shí)際項(xiàng)目開(kāi)發(fā)中多加利用。

以上就是vue3利用v-model實(shí)現(xiàn)父子組件之間數(shù)據(jù)同步的代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3 v-model父子組件數(shù)據(jù)同步的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue批量圖片顯示時(shí)遇到的路徑被解析問(wèn)題

    Vue批量圖片顯示時(shí)遇到的路徑被解析問(wèn)題

    這篇文章主要介紹了Vue批量圖片顯示時(shí)遇到的路徑被解析問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解Vue如何進(jìn)行表單聯(lián)動(dòng)與級(jí)聯(lián)選擇

    詳解Vue如何進(jìn)行表單聯(lián)動(dòng)與級(jí)聯(lián)選擇

    表單聯(lián)動(dòng)和級(jí)聯(lián)選擇是Vue.js中常見(jiàn)的功能,在下面的文章中,我們將討論如何在Vue.js中實(shí)現(xiàn)表單聯(lián)動(dòng)和級(jí)聯(lián)選擇,感興趣的小伙伴可以了解一下
    2023-06-06
  • 在Vue中使用動(dòng)態(tài)import()語(yǔ)法動(dòng)態(tài)加載組件

    在Vue中使用動(dòng)態(tài)import()語(yǔ)法動(dòng)態(tài)加載組件

    在Vue中,你可以使用動(dòng)態(tài)import()語(yǔ)法來(lái)動(dòng)態(tài)加載組件,動(dòng)態(tài)導(dǎo)入允許你在需要時(shí)異步加載組件,這樣可以提高應(yīng)用程序的初始加載性能,本文給大家介紹在Vue中使用動(dòng)態(tài)import()語(yǔ)法動(dòng)態(tài)加載組件,感興趣的朋友一起看看吧
    2023-11-11
  • 使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟詳解

    使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟詳解

    相信大部分Vue開(kāi)發(fā)者都使用過(guò)vue-cli來(lái)構(gòu)建項(xiàng)目,它的確很方便,但對(duì)于很多初級(jí)開(kāi)發(fā)者來(lái)說(shuō),還是要踩不少坑的,下面這篇文章主要給大家介紹了關(guān)于使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟,需要的朋友可以參考下
    2023-01-01
  • Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引的示例代碼

    Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引的示例代碼

    通訊錄字母索引是常用的一種功能,本文主要介紹了Vue+better-scroll 實(shí)現(xiàn)通訊錄字母索引,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • element-ui時(shí)間日期選擇器限制選擇范圍的幾種場(chǎng)景

    element-ui時(shí)間日期選擇器限制選擇范圍的幾種場(chǎng)景

    這篇文章主要給大家介紹了關(guān)于element-ui時(shí)間日期選擇器限制選擇范圍的幾種場(chǎng)景,一般在實(shí)際開(kāi)發(fā)場(chǎng)景中我們需要對(duì)時(shí)間選擇做一些限制,如不能選擇今天之前的時(shí)間、不能選擇今天以后的日期、限制日期不能大于開(kāi)始日期等等,需要的朋友可以參考下
    2023-08-08
  • vue中實(shí)現(xiàn)代碼高亮與語(yǔ)法著色的方法介紹

    vue中實(shí)現(xiàn)代碼高亮與語(yǔ)法著色的方法介紹

    在Vue的開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要展示代碼片段或者進(jìn)行代碼高亮與語(yǔ)法著色,Vue提供了多種方式來(lái)實(shí)現(xiàn)代碼高亮與語(yǔ)法著色,本文將為你詳細(xì)介紹這些方法,需要的朋友可以參考下
    2023-06-06
  • Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問(wèn)題(推薦)

    Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問(wèn)題(推薦)

    這篇文章主要介紹了Vue3+vant+ts 上滑加載解決上滑調(diào)用多次數(shù)據(jù)的問(wèn)題,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Vue3中vue-router的使用方法詳解

    Vue3中vue-router的使用方法詳解

    Vue?Router?是?Vue?的官方路由,它與?Vue.js?核心深度集成,讓用?Vue.js?構(gòu)建單頁(yè)應(yīng)用變得輕而易舉,本文將通過(guò)簡(jiǎn)單的示例為大家介紹一下vue-router的使用,需要的可以參考一下
    2023-06-06
  • vue實(shí)現(xiàn)員工信息錄入功能

    vue實(shí)現(xiàn)員工信息錄入功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)員工信息錄入功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評(píng)論

化州市| 丹巴县| 湖南省| 礼泉县| 盐津县| 延寿县| 固原市| 龙南县| 深泽县| 鹿邑县| 灵武市| 平度市| 泽库县| 溧水县| 建始县| 松潘县| 体育| 万安县| 临高县| 靖远县| 南京市| 宁明县| 威信县| 尉犁县| 新河县| 长泰县| 江北区| 错那县| 延庆县| 南郑县| 建平县| 迁安市| 固原市| 呈贡县| 马龙县| 安乡县| 武夷山市| 诸城市| 大宁县| 从江县| 长寿区|