如何在 Vue.js 中获取购物车商品的总价格并乘以数量

Posted

技术标签:

【中文标题】如何在 Vue.js 中获取购物车商品的总价格并乘以数量【英文标题】:How to get total of cart items price and multiply with quantity in Vue.js 【发布时间】:2021-02-08 14:34:31 【问题描述】:

我正在开发 Vue.js 中的购物车系统,并希望通过乘以产品数量来显示产品价格的总和。最近我在 php 中工作,并通过 array_sum().... 我有一个cartData[],其中我使用Axios 从后端获取值,在一个数组中,有一个名为product_price 的值。我试图用 reduce 方法来实现这一点,但它返回 NaN 在此先感谢

<table id="cart" class="table table-hover table-condensed cart_table">
            <!-- <span class="d-none"> index </span> -->
            <thead>
                <tr>
                    <th style="width:50%">Product</th>
                    <th style="width:10%">Price</th>
                    <th style="width:8%">Quantity</th>
                    <th style="width:8%">Color-Size</th>
                    <th style="width:22%" class="text-center">Subtotal</th>
                    <th style="width:10%"></th>
                </tr>
            </thead>
            <tbody v-for="(cart, index) in cartData" :key="cart.id">
                <tr>
                    <td data-th="Product">
                        <div class="row">
                            <div class="col-sm-2 hidden-xs">
                                <img
                                    :src="
                                        require(`../assets/product_images/$cart.product_image`)
                                    "
                                    class="img-responsive"
                                />
                            </div>
                            <div class="col-lg-10">
                                <span class="d-none"> index </span>
                                <h4 class="nomargin"> cart.product_title </h4>
                            </div>
                        </div>
                    </td>
                    <td data-th="Price">$ cart.cart_price </td>
                    <td data-th="Quantity">
                        <input
                            type="number"
                            class="form-control text-center"
                            v-bind:value="cart.qty"
                        />
                    </td>
                    <td data-th="Color-size">
                        <span>  cart.product_color  -  cart.product_size  </span>
                    </td>
                    <td data-th="Subtotal" class="text-center">
                         cart.cart_price * cart.qty 
                    </td>
                    <td class="actions" data-th="">
                        <button class="btn btn-info btn-sm">
                            <i class="fas fa-sync"></i>
                        </button>
                        <button class="btn btn-danger btn-sm">
                            <i class="fas fa-trash"></i>
                        </button>
                    </td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td>
                        <a href="#" class="btn btn-warning"
                            ><i class="fa fa-angle-left"></i> Continue Shopping</a
                        >
                    </td>
                    <td colspan="2" class="hidden-xs"></td>
                    <td class="hidden-xs text-center">
                     //here i want to get the sum
                        <strong>Total  total </strong>
                    </td>
                    <td>
                        <a href="#" class="btn btn-success btn-block"
                            >Checkout <i class="fa fa-angle-right"></i
                        ></a>
                    </td>
                </tr>
            </tfoot>
        </table>

Vue.js 脚本

import axios from "axios";
export default 
    name: "Cart",
    data() 
        return 
            cartData: [],
        ;
    ,
    created() 
        this.getCartItems();
    ,
    computed: 
total() 
      return this.cartData.reduce((acc, item) => acc + item.product_price, 0);
    
    
    ,

    methods: 
        getCartItems() 
            axios
                .get("http://localhost/shopping_store/src/Api/api?action=getcartitems")
                .then((res) => 
                    this.cartData = res.data.cart_Data;
                )
                .catch((err) => 
                    console.log(err);
                );
        ,
    ,
;

【问题讨论】:

你可以使用 map 函数...类似这样的东西 => function total(cardData) let sum=0 cardData.map(x=> sum = sum + x.attr ) return总和 !! @AmineChoukri 它什么都不显示 你能分享一个来自 cartData 的对象的例子吗! "cart_Data":["p_id":"44","cart_id":"10","cart_price":"100","product_title":"修身条纹口袋衬衫"," product_image":"product-4.jpg","product_color":"Blue","product_size":"L","qty":"3","p_id":"45","cart_id":" 11","cart_price":"42","product_title":"对比色","product_image":"product-7.jpg","product_color":"White","product_size":"M","qty ":"1"] @AmineChoukri 我在 cartData 数组中得到了这个 【参考方案1】:
data()
  return
    total: 0,

    cartData: [
      price: 5,
      qty: 5,
      price: 5,
      qty: 5
      ],
  
,

computed: 
 calcSum()
  let total = 0;
  this.cartData.forEach((item, i) => 
       total += item.price * item.qty;
  );
  return total;
 


【讨论】:

欢迎您。请解释它如何解决问题。单独放置代码并不是一个好习惯。 @jaguar19961 你能用我的代码解释一下吗?? 我在第一个示例中根据您的代码进行了重构,我使用 Vuex 将信息存储在本地存储中并从中获取总计 在这个例子中,我创建了计算属性,当 DOM 被加载时会计算什么 作品非常感谢(y)【参考方案2】:

根据您的对象示例,这里有一个简单的代码来获得产品价格乘以产品数量的总和

var cart_Data =["p_id":"44","cart_id":"10","cart_price":"100","product_title":"Slim striped pocket shirt","product_image":"product-4.jpg","product_color":"Blue","product_size":"L","qty":"3","p_id":"45","cart_id":"11","cart_price":"42","product_title":"Contrasting Shrit","product_image":"product-7.jpg","product_color":"White","product_size":"M","qty":"1"]
function total(cart_Data)
  let sum=0
  cart_Data.map(x=>
   sum = sum + (x.cart_price * x.qty)
 )
  return sum


console.log(total(cart_Data))

【讨论】:

感谢您的回复,您的代码在您的示例中运行良好。我想问的最后一件事是如何将数据函数中的cartData 数组分配给您的定义变量var cart_Data?...因为您使用的是硬编码值 var cart_Data = this.cartData; 我试过了,但它不起作用并在控制台中输出 0 值。 对不起,回答迟了..您不必分配它...直接使用this.cartData 在控制台中仍然得到 0.. 我想我没有正确获取数组。我在 Vue.js mounted 函数中使用你的函数 在将它传递给函数之前尝试控制从后端获得的数组,看看它是否不为空以及它是否具有正确的属性!!

以上是关于如何在 Vue.js 中获取购物车商品的总价格并乘以数量的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js实例:开发购物车

Vue.js实例:开发购物车

Vue:监听属性watch

JAVA EE中如何使用session实现购物车的功能?

如何从购物车中的每件商品中获取数量并传递给活动?

商品价格有所改动怎么同步redis购物车的该商品价格