Вставить или обновить объект в массиве Javascript
Я пытаюсь вставить или обновить уже существующий объект в пустой массив в Vue.js:
additionalFields: [
{
name: '',
description: ''
}
]
Я получаю данные от дочернего компонента:
updateAdditionalTitleForm(value, index) {
this.$emit('updateAdditionalTitle', value, index);
},
updateAdditionalDescriptionForm(value, index) {
this.$emit('updateAdditionalDescription', value, index);
}
Я получаю данные правильно, я просто не могу вставить или обновить их по указанному индексу:
adaptAdditionalTitleForm(value, index) {
this.form.additionalFields.push({ title: value });
},
adaptAdditionalDescriptionForm(value, index) {
this.form.additionalFields.push({ description: value });
}
Это создаст отдельный объект, и я хочу иметь заголовок и описание в одном объекте. Что делать?
1 ответ
Вам нужно использовать данное index
параметр для обновления определенных полей объекта в additionalFields
массив.
adaptAdditionalTitleForm(obj) {
if(!obj.index || (obj.index && obj.index>=this.form.additionalFields.length)){
this.form.additionalFields.push({title:object.value,description:''})
}else if(obj.index) {
this.form.additionalFields[obj.index].title= obj.value;
}
},
adaptAdditionalDescriptionForm(obj) {
if(!obj.index || (obj.index && obj.index>=this.form.additionalFields.length)){
this.form.additionalFields.push({description:obj.value,title:''})
}else if(obj.index){
this.form.additionalFields[obj.index].description=obj.value;
}
}
Также передача нескольких аргументов в emit не работает, поэтому вам нужно обернуть их в объект.
updateAdditionalTitleForm(value, index) {
this.$emit('updateAdditionalTitle', {value,index});
},
updateAdditionalDescriptionForm(value, index) {
this.$emit('updateAdditionalDescription',{value,index});
}