Cart.vue 904 B

12345678910111213141516171819202122232425262728293031323334353637
  1. <template>
  2. <div class="cart">
  3. <h2>Your Cart</h2>
  4. <p v-show="!products.length"><i>Please add some products to cart.</i></p>
  5. <ul>
  6. <li v-for="p in products">
  7. {{ p.title }} - {{ p.price | currency }} x {{ p.quantity }}
  8. </li>
  9. </ul>
  10. <p>Total: {{ total | currency }}</p>
  11. <p><button :disabled="!products.length" @click="checkout(products)">Checkout</button></p>
  12. <p v-show="checkoutStatus">Checkout {{ checkoutStatus }}.</p>
  13. </div>
  14. </template>
  15. <script>
  16. import { mapGetters } from 'vuex'
  17. export default {
  18. computed: {
  19. ...mapGetters({
  20. products: 'cartProducts',
  21. checkoutStatus: 'checkoutStatus'
  22. }),
  23. total () {
  24. return this.products.reduce((total, p) => {
  25. return total + p.price * p.quantity
  26. }, 0)
  27. }
  28. },
  29. methods: {
  30. checkout (products) {
  31. this.$store.dispatch('checkout', products)
  32. }
  33. }
  34. }
  35. </script>