Мой сайт имеет заголовок, который отображает общее количество товаров в корзине.Для этого я создал файл с именем shoppingCart.js следующим образом:
export default new class ShoppingCart {
constructor() {
this.loadCart();
}
saveCart() {
window.localStorage.setItem('cart', JSON.stringify(this.cache));
}
loadCart() {
const cart = JSON.parse(window.localStorage.getItem('cart') || null);
this.cache = (cart && isArray(cart) && cart.length) ? cart : [];
}
removeProduct(product) {
//Remove the product from the this.cache array.
//Save the cart in the localStorage
}
addProduct(product) {
//Update this.cache, first...
//Save the cart in the localStorage
}
get products() {
return Object.freeze([...this.cache]);
}
}();
Затем в HeaderView.vue я импортировал вышеуказанный класс и создал вычисляемый метод для получения общего числаэлементов в корзине:
import ShoppingCart from '../helpers/shoppingCart';
export default {
name: 'HeaderView',
computed: {
totalCartItems() {
return ShoppingCart.products.length;
},
},
};
На странице ProductView.vue (где товар добавлен в корзину) я также импортирую ShoppingCart (как указано выше) и имею метод с именем "addToCart", которыйПредполагается добавить данный продукт в корзину:
methods: {
addToCart() {
ShoppingCart.addProduct(
this.product
);
},
},
Однако, независимо от того, что я делаю или пробовал, общее количество товаров в корзине не отображается в заголовке, если я не перезагрузил страницу,(Я бы хотел, чтобы он обновлялся после вызова метода addToCart в ProductView.vue.
Не могли бы вы сообщить мне, что я делаю неправильно?
РЕДАКТИРОВАТЬ: Обратите внимание, чтоМне нужно использовать модули для этого, и я не хочу использовать для этого "Vue.prototype. $" Или плагины VueJS.