0

I am new to Vue.js and I can't seem to figure out how to change the format of data. Currently it's using the following structure.

app.js:

new Vue({
  el: '#app',
  data: {
    price: 0,
    shipping: 0,
    handling: 0,
    discount: 0
  },
  computed: {
    total: function () {
      return ((
        this.price * 100 + 
        this.shipping * 100 + 
        this.handling * 100 - 
        this.discount * 100
      ) / 100).toFixed(2)
    }
  }
})

index.html:

<div id="app" class="row">
  <currency-input label="Price" v-model="price"></currency-input>
  <currency-input label="Shipping" v-model="shipping"></currency-input>
  <currency-input label="Handling" v-model="handling"></currency-input>
  <currency-input label="Discount" v-model="discount"></currency-input>

  <p class="medium-12 columns">Total: ${{ total }}</p>
</div>

http://codepen.io/pixelasticity/pen/rjeVgz

I want to change the data to the following, or some variation thereof, but it doesn't work.

app.js:

new Vue({
  el: '#app',
  data: {
    products: [
      {
        price: 0,
        shipping: 0,
        handling: 0,
        discount: 0
      }
    ]
  },
  computed: {
    total: function () {
      return ((
        this.products[0].price * 100 + 
        this.products[0].shipping * 100 + 
        this.products[0].handling * 100 - 
        this.products[0].discount * 100
      ) / 100).toFixed(2)
    }
  }
})

What am I missing?

2
  • Why did you change data to a products array? Commented Jan 11, 2017 at 22:40
  • So that I could have multiple products with different but still adjustable prices, shipping fees and discounts. I actually want to have the price inputs in a child component. Commented Jan 11, 2017 at 22:51

1 Answer 1

0

You have to update properties in v-model directives, too.

<currency-input label="Price" v-model="products[0].price"></currency-input>
<currency-input label="Shipping" v-model="products[0].shipping"></currency-input>
<currency-input label="Handling" v-model="products[0].handling"></currency-input>
<currency-input label="Discount" v-model="products[0].discount"></currency-input>

This ansewers your question. However, your data structure seems wired. Why you need a array here while you sum only first product? Your total computed property do not sum all other products anyway.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks. I knew it had to be something obvious like that. The reason I want it formatted that way is so I can have multiple products with different default prices and shipping fees.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.