Vuex实现简单购物车
导读:收集整理的这篇文章主要介绍了Vuex实现简单购物车,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了Vuex实现简单购物车的具体代码,供大家参考,具体内容如下文件结...
收集整理的这篇文章主要介绍了Vuex实现简单购物车,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了Vuex实现简单购物车的具体代码,供大家参考,具体内容如下
文件结构
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 } } & nbsp; & nbsp; 库存: { { 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 = { // 获取初始商品数据 getAllProducts({ commit } ) { api.getProducts(products => commit('setProducts', products)); } } const mutations = { setProducts(state, products) { state.all = products; } , // 减少该商品库存 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 = { // 增加购物车中同等商品的数量 increamentItemQuantity(state, { id } ) { let productItem = state.addedList.find(item => item.id === id); productItem.quantity ++; } , // 将商品加入购物车 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");
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:- 基于vuex实现购物车功能
- Vuex实现购物车小功能
- vuex实现购物车的增加减少移除
- vuex实现购物车功能
- 使用vuex较为优雅的实现一个购物车功能的示例代码
- vuex实现的简单购物车功能示例
- 用vuex写了一个购物车H5页面的示例代码
- vuex实现简单的购物车功能
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Vuex实现简单购物车
本文地址: https://pptw.com/jishu/594013.html