How do I push items into an array in the data object in Vuejs? Vue seems not to be watching the .push() method How do I push items into an array in the data object in Vuejs? Vue seems not to be watching the .push() method vue.js vue.js

How do I push items into an array in the data object in Vuejs? Vue seems not to be watching the .push() method


The push() method ought to add purchase objects to the queue array, but as @FK82 pointed out in his comment, push() is adding multiple references to the same purchase object. This means that if you change the object by increasing the quantity, every purchase's quantity property will be updated.

You can give that a try here:

const exampleComponent = Vue.component("example-component", {  name: "exampleComponent",  template: "#example-component",  data() {    return {      queue: [],      purchase: {        product: null,        customer: null,        quantity: null      }    };  },  methods: {    queuePurchase() {      this.queue.push( this.purchase );    }  }});const page = new Vue({  name: "page",  el: ".page",  components: {    "example-component": exampleComponent  }});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.4/vue.min.js"></script><template id="example-component">  <div>    <p>The Queue has {{ this.queue.length }} items.</p>    <input      v-model="purchase.quantity"      type="number"      min="1"      name="product"      placeholder="Quantity"    >    <button @click="queuePurchase">      Add to Queue    </button>    <pre>{{ JSON.stringify(this.queue, null, 2) }}</pre>  </div></template><div class="page">  <example-component></example-component></div>