Vue3中如何自定義雙向綁定
1.父組件綁定變化
vue2中父組件通過(guò)v-model綁定,子組件默認(rèn)接收一個(gè)value屬性
vue3中需要通過(guò)v-model指定一個(gè)需要綁定的屬性名稱(chēng)
<!-- 通過(guò):后面指定子組件接收的props名稱(chēng) --> <AddBook v-model:dialogVisible="addFormVisible"></AddBook>
2. 子組件通過(guò)props接收
然后在setup函數(shù)中,通過(guò)watch監(jiān)聽(tīng),定義一個(gè)中間變量。
1)emits:Vue3新增屬性,定義子組件通過(guò)emit傳遞給父組件的事件名稱(chēng),以及通過(guò)事件傳遞的參數(shù)
2)Vue3需要通過(guò)update方法可以實(shí)現(xiàn)雙向綁定
<template> <el-dialog class="add-book-dialog" :title="target && target._id ? '編輯賬本': '添加賬本'" :close-on-click-modal="false" v-model="dialogVisibleData"> <el-form :model="targetForm" :rules="rules" ref="bookForm"> ... </el-form> <template #footer> <span class="dialog-footer"> <el-button @click="cancel">取 消</el-button> <el-button type="primary" @click="save">確 定</el-button> </span> </template> </el-dialog> </template>
<script lang="ts"> import { reactive, ref, watch, toRefs, readonly, defineComponent } from 'vue'; export default defineComponent({ // 觸發(fā)的事件的名稱(chēng) emits: { 'update:dialogVisible': (val: boolean) => { return val; } }, props: { ... dialogVisible: { // 是否顯示模態(tài)框 type: Boolean, default: false }, }, setup(props, { emit }) { const { dialogVisible } = toRefs(props) as any; let dialogVisibleData = ref(false); const cancel = () => { dialogVisibleData.value = false; // 可以直接emit update事件,也可以改變dialogVisibleData value值,觸發(fā)watch監(jiān)聽(tīng) emit('update:dialogVisible', dialogVisibleData.value); }; // 監(jiān)聽(tīng)props中dialogVisible值 watch(() => dialogVisible.value, (newValue: boolean, oldValue: boolean) => { dialogVisibleData.value = newValue; console.log(oldValue, newValue, '改變'); }); watch(() => dialogVisibleData.value, (newVal: boolean, oldVal: boolean) => { emit('update:dialogVisible', newVal); }); return { dialogVisibleData, cancel }; }, }); </script>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue使用Element的Tree樹(shù)形控件實(shí)現(xiàn)拖動(dòng)改變節(jié)點(diǎn)順序方式
這篇文章主要介紹了vue使用Element的Tree樹(shù)形控件實(shí)現(xiàn)拖動(dòng)改變節(jié)點(diǎn)順序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Vue中使用event的坑及解決event is not defined
這篇文章主要介紹了Vue中使用event的坑及解決event is not defined,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue中的請(qǐng)求攔截器和響應(yīng)攔截器用法及說(shuō)明
這篇文章主要介紹了Vue中的請(qǐng)求攔截器和響應(yīng)攔截器用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Vue使用v-bind動(dòng)態(tài)綁定CSS樣式
這篇文章給大家介紹了Vue使用v-bind動(dòng)態(tài)綁定CSS樣式,文中有相關(guān)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02vue3.0找不到模塊“./App.vue”或其相應(yīng)的類(lèi)型聲明(多種情況分析)
這篇文章主要介紹了vue3.0找不到模塊“./App.vue”或其相應(yīng)的類(lèi)型聲明,報(bào)錯(cuò)原因是typescript?只能理解?.ts?文件,無(wú)法理解?.vue文件,本文通過(guò)多種情況分析給大家詳細(xì)講解,需要的朋友可以參考下2023-01-01element-ui中Table表格省市區(qū)合并單元格的方法實(shí)現(xiàn)
這篇文章主要介紹了element-ui中Table表格省市區(qū)合并單元格的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Vue3+Vite4項(xiàng)目進(jìn)行性能優(yōu)化的配置方案
這篇文章主要為大家詳細(xì)介紹了Vue3如何結(jié)合Vite4對(duì)項(xiàng)目進(jìn)行性能優(yōu)化的相關(guān)配置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04