@Ghost2692

Почему vuejs удаляет элемент с конца?

Есть проблема, vue удаляет последний элемент массива, игнорируя указанный индекс, может я где-то допустил ошибку?
<div id="segment">
  <button @click="add()">
Add
</button>
  <div v-for="(item, index) in conditionList" v-bind:key="conditionList.id">
    <select class="form-control" style="min-width: 175px;" v-model="selectField[index]">
           <optgroup v-for="(category, key) in categories"  :label="category" >
                <template v-for="(labels, title) in nameFields">
                     <option v-for="(label, name) in labels"
                                   :value="name"
                                    v-if="title == key"
                                    :disabled="selectField.includes(name)" >
                                       {{label}}
                     </option>
                </template>
           </optgroup>
    </select>
    <button @click="conditionList.splice(index, 1)">
      Delete
    </button>
  </div>
</div>

new Vue({
  el: '#segment',
  data: {
    conditionList: [{
      id: 1,
    }, ],
    nextId: 2,
    selectField: [],
    categories: {
      "groups": "Группы",
      "fields": "Поля",
      "statistic": "Статистика"
    },
    nameFields: {
      "groups": {
        "groups": "Группы"
      },
      "fields": {
        "email": "Email",
        "name": "Имя",
        "last_name": "Фамилия",
      },
      "statistic": {
        "opens": "Открыли",
        "transitions": "Переходы",
        "sent": "Отправлено",
        "mailing": "Рассылка"
      }
    },
  },
  methods: {
    add: function() {
      this.conditionList.push({
        id: this.nextId++,
      })
    }
  }
})
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Удаляется где надо, проблема в том, что вы разделили данные со значениями селектов и их id. Одно удаляете, а другое остаётся. Храните значение в том же объекте, что и id. Т.е., вырезаете selectField, а v-model="selectField[index]" заменяете на v-model="item.value", например, а selectField.includes(name) на conditionList.some(n => n.value === name).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
KornevaViktoria
@KornevaViktoria
Frontend Developer
1) Выглядит странно, у вас в массиве conditionList есть объект с id, но в самом conditionList нет id. Возможно в этом проблема.
v-bind:key="conditionList.id"

2)
vue удаляет элемент с объекта
Так все таки из массива вы удаляете или из какого-то объекта?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы