проблема vue 3 при вводе значений

#vue.js #vuejs3

Вопрос:

У меня есть два компонента, первый из которых представляет собой таблицу вставки строк, а второй содержит строки

У меня проблема с входами, все работает нормально, за исключением того, что, когда я удаляю строку в середине таблицы, значения других входов сбрасываются,

родительский компонент :

 lt;scriptgt; import editortable from "./editortable.vue"; export default { data: () =gt; {  return {  elements: [{ id: 0, ref: "1", equation: "2" }],  nextid: "1",  };  },  methods: {  removrow(index) {  this.elements.splice(index, 1);  },  add() {  this.elements.push({  id: this.nextid  ,  ref: "",  });  },  },     components: {  editortable,  }, }; lt;/scriptgt; 
 lt;tbodygt;  lt;tr  is="vue:editortable"  v-for="(element, index) in elements"  :iden="element.id"  :referen="element.ref"  :eq="element.equation"  :key="index"  @delete="removrow(index)"  gt;lt;/trgt;  lt;/tbodygt;  lt;button type=" button" class="btn btn-primary" @click="add"gt;  Ajouter une ligne  lt;/buttongt; 

** компонент :**

 lt;scriptgt; export default {  props: ["iden", "referen", "eq"],  emits: ["delete"],  methods: {  deleterow() {  this.$emit("delete");  },  }, }; lt;/scriptgt; 
 lt;templategt;  lt;trgt;  lt;tdgt;  lt;input class="form-control" type="ipunt" :value="iden" /gt;  lt;/tdgt;  lt;tdgt;lt;input class="form-control" type="ipunt" :value="referen" /gt;lt;/tdgt;  lt;tdgt;lt;input class="form-control" type="ipunt" :value="eq" disabled /gt;lt;/tdgt;  lt;tdgt;  lt;button type="button" class="btn btn-danger" @click="deleterow"gt;  delete  lt;/buttongt;  lt;/tdgt;  lt;/trgt; lt;/templategt; 

Ответ №1:

Существует 1 очевидная проблема, заключающаяся в том, что вы не должны использовать индекс в качестве ключа в вашем случае. Измените его, чтобы использовать идентификатор.

 :key="element.id"  

И removrow(id) , используя идентификатор, сначала найдите индекс, а затем удалите его, все должно быть в порядке.

 removrow(id) {  const index = this.elements.findIndex(ele =gt; ele.id === id);  this.elements.splice(index, 1); }  

Комментарии:

1. Огромное спасибо!

2. @Norman Нет проблем, если этот ответ помог вам решить проблему, пожалуйста, отметьте его как принятый ответ.