我有一个很长的表单A,内容固定,如下。
A.vue
<Form>
<Select v-model='form.a'/>
<Input v-model='form.b'/>
<Select v-model='form.c'/>
<Input v-model='form.d'/>
<DatePicker v-model='form.e'/>
………………………………
</Form>
A在项目内非常多的地方使用,A1,A2,A3的内部数据独立不用同步。
但是每个使用A的地方都会因为父组件的某些事件而改动A的内部参数。
<template>
<A v-model="formData"></A>
</template>
<script setup>
const formData = ref({a,b,c,d...})
// await res = ajax()
webSocket.onMessage(res=>{
formData.a = res.a
})
</script>
请问这种情况有无办法使formData双向绑定?
现在我的实现方法是
<template>
<Form>
<Select v-model='form.a'/>
<Input v-model='form.b'/>
<Select v-model='form.c'/>
<Input v-model='form.d'/>
<DatePicker v-model='form.e'/>
………………………………
</Form>
<template>
<script setup>
const form = computed(() => {
return props.modelValue
})
<script>
但是这样违背了单项数据流的原则。所以请问有更好的办法吗?
子组件:
父组件: