This article example shares the specific code of Vuex to implement a simple shopping cart for your reference. The specific content is as follows File Structure App.vue <template> <div id="app"> <h3>Shopping Cart Demo</h3> <hr> <h4>Products:</h4> <ProductList /> <hr> <h4>My Cart</h4> <ShoppingCart /> </div> </template> <script> import ProductList from '@/components/ProductList'; import ShoppingCart from '@/components/ShoppingCart'; export default { components: ProductList, ShoppingCart } } </script> Products.vue <template> <div> <ul v-for="item in products" :key="item.id"> <li> {{ item.title }} - {{ item.price }} Inventory: {{ item.inventory }}<br> <button :disabled="!item.inventory" @click="addToCart(item)">add to cart</button> </li> </ul> </div> </template> <script> import { mapGetters, mapActions } from 'vuex'; export default { computed: { // ...mapGetters('products',{ // products: 'allProducts' // }) ...mapGetters({ products: 'products/allProducts' }) }, methods: { ...mapActions('cart',['addToCart']) }, created() { this.$store.dispatch('products/getAllProducts'); } } </script> ShoppingCart.vue <template> <div> <ul v-for="item in products" :key="item.id"> <li>{{ item.title }} *{{ item.quantity }}</li> </ul> <div>total: {{ total }}</div> </div> </template> <script> import { mapGetters } from 'vuex'; export default { computed: { ...mapGetters('cart', { products: 'cartProducts', total: 'cartTotalPrice' }) } } </script> modules/products.js import api from '../../api'; const state = { all: [] } const getters = { allProducts: state => state.all } const actions = { // Get initial product data getAllProducts({ commit }) { api.getProducts(products => commit('setProducts', products)); } } const mutations = { setProducts(state, products) { state.all = products; }, // Reduce the inventory of this product decreamentInventory(state, { id }) { let productItem = state.all.find(item => item.id === id); productItem.inventory --; } } export default { namespaced: true, state, getters, actions, mutations } modules/cart.js const state = { addedList: [] } const getters = { cartProducts(state, getters, rootState) { return state.addedList.map((item, index) => { let productItem = rootState.products.all.find(product => product.id === item.id); return { title: productItem.title, price: productItem.price, quantity: item.quantity } }) }, cartTotalPrice(state, getters) { return getters.cartProducts.reduce((total, product) => { return total + (product.price * product.quantity); }, 0); } } const actions = { addToCart({ state, commit }, product) { if (product.inventory > 0) { let productItem = state.addedList.find(item => item.id === product.id); if (productItem) { commit('increamentItemQuantity', productItem); } else { commit('pushItemToCart', product); } commit('products/decreamentInventory', product, { root: true }); } } } const mutations = { // Increase the number of identical items in the shopping cart increaseItemQuantity(state, { id }) { let productItem = state.addedList.find(item => item.id === id); productItem.quantity++; }, // Add the item to the shopping cart pushItemToCart(state, { id }) { state.addedList.push({ id, quantity: 1 }) }, } export default { namespaced: true, state, getters, actions, mutations } store/index.js import Vue from 'vue'; import Vuex from 'vuex'; import cart from './modules/cart'; import products from './modules/products'; Vue.use(Vuex); export default new Vuex.Store({ modules: cart, products } }); main.js import Vue from "vue"; import App from "@/components/App.vue"; import store from "@/store"; Vue.config.productionTip = false; new Vue({ store, render: h => h(App) }).$mount("#app"); The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: An example of implementing a simple infinite loop scrolling animation in Vue
>>: JS realizes the scrolling effect of announcement online
Using mock.js in Vue project Development tool sel...
Problem: The PHP program on one server cannot con...
MySQL trigger simple example grammar CREATE TRIGG...
We may have a question: After we install MySQL lo...
Table of contents 1. Array deconstruction 2. Obje...
This article example shares the specific code of ...
By default, MySQL in Linux distinguishes between ...
Table of contents Explanation of v-text on if for...
Before talking about data responsiveness, we need...
Today, when installing nginx on the cloud server,...
The two parameters innodb_flush_log_at_trx_commit...
When we need to change the table name or modify t...
Optimize queries Use the Explain statement to ana...
Table of contents 1. Basics 2. Problem Descriptio...
background Before we know it, a busy year is comi...