首页前端开发JavaScriptVuex实现简单购物车

Vuex实现简单购物车

时间2024-01-31 13:21:02发布访客分类JavaScript浏览312
导读:收集整理的这篇文章主要介绍了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购物车"

若转载请注明出处: Vuex实现简单购物车
本文地址: https://pptw.com/jishu/594013.html
c语言程序的基本结构是什么 为什么要学习C语言

游客 回复需填写必要信息