I am trying to create a form with nested components where the data that I pass to the child component can be a nested value of an object.
The input fields with strings are working as expected, I just have an issue with the object value. Thanks in advance for your advice!
Here's the link to my sandbox: https://codesandbox.io/s/vue3-form-54xi8
My parent component VueVModel.vue:
<template>
<div>
<custom-text-input
v-model:firstName="firstName"
v-model:lastName="lastName"
v-model:address.street="address.street"
/>
<p>First Name: {{ firstName }}</p>
<p>Last Name: {{ lastName }}</p>
<p>Street: {{ address.street }}</p>
</div>
</template>
<script>
import { ref, reactive } from "vue";
import CustomTextInput from "./CustomTextInput.vue";
export default {
components: {
CustomTextInput,
},
setup() {
// data
const firstName = ref("Max");
const lastName = ref("Testname");
const address = reactive({
street: "Milkyway 3",
});
return {
firstName,
lastName,
address,
};
},
};
</script>
My child component CustomTextInput.vue
<template>
<div>
<p>
<label> First Name </label>
<input
type="text"
:value="firstName"
placeholder="First Name"
@input="$emit('update:firstName', $event.target.value)"
/>
</p>
<p>
<label> Last Name </label>
<input
type="text"
:value="lastName"
placeholder="Last Name"
@input="$emit('update:lastName', $event.target.value)"
/>
</p>
<p>
<label> Street </label>
<input
type="text"
:value="street"
placeholder="Street"
@input="$emit('update:street', $event.target.value)"
/>
</p>
</div>
</template>
<script>
export default {
props: {
firstName: String,
lastName: String,
street: String,
},
};
</script>