В родительском компоненте храните массив объектов с данными:
data: () => ({
items: [],
}),
На основе этого массива создаёте с помощью
v-for
экземпляры дочернего компонента, к которым цепляете посредством
v-model
элементы массива:
<child-component v-for="(n, i) in items" v-model="items[i]"></child-component>
В дочернем компоненте делаете вычисляемое свойство: объект с данными, получаемый из родителя, заворачиваете в Proxy, который будет перехватывать установку значений свойств, собирать новый объект и отправлять его назад родителю:
props: [ 'value' ],
computed: {
innerValue() {
return new Proxy(this.value, {
set: (target, prop, val) => {
this.$emit('input', { ...target, [prop]: val });
return true;
},
});
},
},
Используете свойства этого объекта в
v-model
:
<input type="text" v-model="innerValue.someStringProp">
<input type="checkbox" v-model="innerValue.someBooleanProp">
<input type="number" v-model.number="innerValue.someNumberProp">
https://jsfiddle.net/aghpL7tf/2/