Вставить или обновить объект в массиве 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});
}
Другие вопросы по тегам