I am developing an e-commerce window and it was working perfectly until the part where I needed to add items to the cart. the browser console showed an error when I wanted to display the items in the cart. However, the strange thing is that it works perfectly in the incognito window. What could be the issue? Below are my two files: Code for the cart.vue file:
<template> <div class="page-cart"> <div class="columns is-multiline"> <div class="column is-12"> <h1 class="title">Cart</h1> </div> <div class="column is-12 box"> <table class="table is-fullwidth" v-if="cartTotalLength"> <thead> <tr> <th>Product</th> <th>Price</th> <th>Quantity</th> <th>Total</th> <th></th> </tr> </thead> <tbody> <CartItem v-for="item in cart.items" v-bind:key="item.product.id" v-bind:initialItem="item" v-on:removeFromCart="removeFromCart"/> </tbody> </table> <p v-else>Are you gonna stay hungry?...😕</p> </div> <div class="column is-12 box"> <h2 class="subtitle">Summary</h2> <strong>Ksh{{ cartTotalPrice.toFixed(2) }}</strong>, {{ cartTotalLength }} items <hr> <router-link to="/cart/checkout" class="button is-dark">Proceed to checkout</router-link> </div> </div> </div> </template> <script> import axios from 'axios' import CartItem from '@/components/CartItem.vue' export default { name: 'Cart', components: { CartItem }, data() { return { cart: { items: [] } } }, mounted() { this.cart = this.$store.state.cart }, methods: { removeFromCart(item) { this.cart.items = this.cart.items.filter(i => i.product.id !== item.productid) } }, computed: { cartTotalLength() { return this.cart.items.reduce((acc, curVal) => { return acc += curVal.quantity }, 0) }, cartTotalPrice() { return this.cart.items.reduce((acc, curVal) => { return acc += curVal.product.price * curVal.quantity }, 0) }, } } </script>
The following code is for a component, cartItem.vue:
<template> <tr> <td><router-link :to="item.product.get_absolute_url">{{ item.product.name }}</router-link></td> <td>Ksh{{ item.product.price }}</td> <td> {{ item.quantity }} <a @click="decrementQuantity(item)">-</a> <a @click="incrementQuantity(item)">+</a> </td> <td>Ksh{{ getItemTotal(item).toFixed() }}</td> <td><button class="delete" @click="removeFromCart(item)"></button></td> </tr> </template> <script> export default { name: 'CartItem', props: { initialItem: Object }, data() { return { item: this.initialItem } }, methods: { getItemTotal(item) { return item.quantity * item.product.price }, decrementQuantity(item) { item.quantity -= 1 if (item.quantity === 0) { this.$emit('removeFromCart', item) } this.updateCart() }, incrementQuantity(item) { item.quantity += 1 this.updateCart() }, updateCart() { localStorage.setItem('cart', JSON.stringify(this.$store.state.cart)) }, removeFromCart(item) { this.$emit('removeFromCart', item) this.updateCart() }, }, } </script>
I also noted that the phone browser could not open some contents of the website on the network. Especially the contents from the server are not opened in my phone’s browser. I am using Bulma CSS framework.
Advertisement
Answer
As I don’t know the error from the console, I could only guess the problem. You should try to use a different browser, or at least remove the data (cookies, storage) for your site, and see what happens. Perhaps there is some old previous data that would lead to a problem.