【发布时间】:2021-03-24 23:58:46
【问题描述】:
假设我有一个分为两个部分的表单,每个部分通过道具与父表单进行通信。如何避免改变从父表单传递的道具?
父窗体.vue
<template>
<div>
<AddressForm :form-data="formData.address" />
<OtherForm :form-data="formData.other" />
</div>
</template>
<script>
export default {
data() {
return {
formData: {
address: {
address_no: "",
country: "",
},
other: {
remarks: "",
},
},
};
},
};
</script>
AddressForm.vue
<template>
<div>
<input v-model="formData.address_no" />
<input v-model="formData.country" />
</div>
</template>
<script>
export default {
name: "AddressForm",
props: { formData: { type: Object, required: true } },
};
</script>
OtherForm.vue
<template>
<div>
<textarea v-model="formData.remarks" />
</div>
</template>
<script>
export default {
name: "OtherForm",
props: { formData: { type: Object, required: true } },
};
</script>
更改AddressForm.vue 或OtherForm.vue 中输入字段的值将触发道具突变警告。我想知道如何在不改变道具的情况下与表单进行上下交流?
我已经提出了可能的解决方案,但我不知道我应该选择哪一个(以及如何实施)
- 在
created()中克隆formData属性并将v-model链接到本地克隆的formData而不是属性。然后观察克隆的formData并在每次值更改时发出。 - 使用
v-model而不是 props 进行绑定
【问题讨论】:
标签: javascript vue.js