Vue3中如何自定義雙向綁定
1.父組件綁定變化
vue2中父組件通過(guò)v-model綁定,子組件默認(rèn)接收一個(gè)value屬性
vue3中需要通過(guò)v-model指定一個(gè)需要綁定的屬性名稱
<!-- 通過(guò):后面指定子組件接收的props名稱 --> <AddBook v-model:dialogVisible="addFormVisible"></AddBook>
2. 子組件通過(guò)props接收
然后在setup函數(shù)中,通過(guò)watch監(jiān)聽(tīng),定義一個(gè)中間變量。
1)emits:Vue3新增屬性,定義子組件通過(guò)emit傳遞給父組件的事件名稱,以及通過(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ā)的事件的名稱
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)文章
快速解決 keep-alive 緩存組件中定時(shí)器干擾問(wèn)題
文章介紹了在使用keep-alive緩存組件時(shí),如何在組件被緩存后清理定時(shí)器以避免干擾其他組件的邏輯,通過(guò)在deactivated鉤子中清理定時(shí)器,可以確保組件被緩存時(shí)不會(huì)繼續(xù)運(yùn)行定時(shí)器,感興趣的朋友一起看看吧2025-02-02
vue前端框架—Mint UI詳解(更適用于移動(dòng)端)
這篇文章主要介紹了vue前端框架—Mint UI的詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開(kāi)發(fā),路由配置方式
今天小編就為大家分享一篇vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開(kāi)發(fā),路由配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決方案
這篇文章主要給大家介紹了關(guān)于ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決的相關(guān)資料,公司項(xiàng)目監(jiān)聽(tīng)系統(tǒng)中發(fā)現(xiàn)一個(gè)高頻錯(cuò)誤ResizeObserver loop limit exceeded,而瀏覽器的console中卻沒(méi)有提示,需要的朋友可以參考下2023-09-09
elementui 開(kāi)始結(jié)束時(shí)間可以選擇同一天不同時(shí)間段的實(shí)現(xiàn)代碼
這篇文章主要介紹了elementui 開(kāi)始結(jié)束時(shí)間可以選擇同一天不同時(shí)間段的實(shí)現(xiàn)代碼,需要先在main.js中導(dǎo)入相應(yīng)代碼,代碼簡(jiǎn)單易懂,需要的朋友可以參考下2024-02-02
對(duì)Vue beforeRouteEnter 的next執(zhí)行時(shí)機(jī)詳解
今天小編就為大家分享一篇對(duì)Vue beforeRouteEnter 的next執(zhí)行時(shí)機(jī)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

