Неожиданное поведение удаление дочернего компонента (строки)


Описание:

У меня есть таблица с некоторыми продуктами, каждая строка-это пользовательский компонент vue <row>.

Каждый элемент имеет кнопку закрытия (удаления), которая запускает пользовательское событие "удалить". Главное приложение прослушивает это событие и удаляет детей (по индексу)

Строка часть из некоторого статического текста она содержит вход с номером.

Задача:

Родитель (приложение Vue) удаляет строку, но затем перемещается значение входных данных (и заменяет его Предыдущее значение) на вход в следующей строке.

Ожидаемое поведение:

Я хочу просто удалить элемент меня не волнует значение ввода текста, как только он будет удален. Он не должен переносить свою ценность на следующего родного брата.

Я привожу пример. ***Благодаря передовой

let row = Vue.component('row', {
  name: 'row',
  props: ['number', 'name', 'sq'],
  data: () => ({
    quantity: 0
  }),
  template: '<tr>' +
    '<td>{{number}}</td>' +
    '<td>{{name}}</td>' +
    '<td><button v-on:click="quantity--">-</button><input type="text" :value="quantity"><button v-on:click="quantity++">+</button></td>' +
    '<td><button v-on:click="remove">&times;</button></td>' +
    '</tr>',
  methods: {
    remove: function() {
      this.$emit('remove', this.quantity)
    }
  },
  beforeMount() {
    this.quantity = this.sq
  }

})


new Vue({
  el: "#app",
  data: {
    out: [],
    rows: [{
        name: "Icecream",
        sq: 0
      },
      {
        name: "Sugar cube",
        sq: 50
      },
      {
        name: "Peanut butter",
        sq: 0
      },
      {
        name: "Heavy cream",
        sq: 0
      },
      {
        name: "Cramberry juice",
        sq: 0
      }
    ]
  },
  methods: {
    removeRow: function(index, quantity) {
      this.out.push(`Removing row ${index} (${this.rows[index].name} | ${quantity} units)`)
      this.rows.splice(index, 1)
    }
  },
  computed: {
    log: function() {
      return this.out.join("rn")
    }
  }
})
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

h2 {
  font-weight: bold;
  margin-bottom: 10px;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

td {
  padding: 4px 5px;
}

input {
  width: 40px;
  text-align: center;
}

h4 {
  margin-top: 20px;
  margin-bottom: 5px;
}

#log {
  padding: 10px;
  background: #20262E;
  color: #fff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
  <h2>Cart:</h2>
  <table>
    <row v-for="(row, index) in rows" :number="index" :name="row.name" :sq="row.sq" v-on:remove="removeRow(index, $event)"></row>
  </table>

  <h4>Log</h4>
  <pre id="log" v-html="log"></pre>
</div>

!***

1 2

1 ответ:

Как @Bert упоминалось в комментариях. Проблема была в том, что у меня не было ключа.

Https://vuejs.org/v2/api/#key

Добавление его решило проблему Спасибо