Vue3中如何自定義雙向綁定
1.父組件綁定變化
vue2中父組件通過v-model綁定,子組件默認接收一個value屬性
vue3中需要通過v-model指定一個需要綁定的屬性名稱
<!-- 通過:后面指定子組件接收的props名稱 --> <AddBook v-model:dialogVisible="addFormVisible"></AddBook>
2. 子組件通過props接收
然后在setup函數(shù)中,通過watch監(jiān)聽,定義一個中間變量。
1)emits:Vue3新增屬性,定義子組件通過emit傳遞給父組件的事件名稱,以及通過事件傳遞的參數(shù)
2)Vue3需要通過update方法可以實現(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)聽
emit('update:dialogVisible', dialogVisibleData.value);
};
// 監(jiān)聽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>
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue使用Element的Tree樹形控件實現(xiàn)拖動改變節(jié)點順序方式
這篇文章主要介紹了vue使用Element的Tree樹形控件實現(xiàn)拖動改變節(jié)點順序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Vue中使用event的坑及解決event is not defined
這篇文章主要介紹了Vue中使用event的坑及解決event is not defined,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
vue3.0找不到模塊“./App.vue”或其相應的類型聲明(多種情況分析)
這篇文章主要介紹了vue3.0找不到模塊“./App.vue”或其相應的類型聲明,報錯原因是typescript?只能理解?.ts?文件,無法理解?.vue文件,本文通過多種情況分析給大家詳細講解,需要的朋友可以參考下2023-01-01
element-ui中Table表格省市區(qū)合并單元格的方法實現(xiàn)
這篇文章主要介紹了element-ui中Table表格省市區(qū)合并單元格的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

