关于购物车订单计算

关于购物车订单计算

关于购物车订单计算,我写了一个函数,但不知道在setup函数里要如何调用,使用其执行结果。

我写的函数如下:

相关代码:

const SummaryCartEffect = () => {
const store = useStore();
const route = useRoute();
const shopId = route.params.id;
const { cartList } = reactive(store.state);
const goodsList = cartList[shopId];
let totalPrice = 0;
let goodsNum = 0;
if (goodsList) {
for (let i in goodsList) {
goodsNum += goodsList[i].count;
totalPrice += goodsList[i].count * goodsList[i].price;
}
}
console.log(totalPrice, goodsNum);
return {totalPrice, goodsNum };
};

我知道我写的这个函数有没有问题,也不知道在setup里应该如何用,总之,结果不对。

之前学的函数导出的都是对象,在setup函数里,用解构赋值从函数执行结果中导出即可,但现在这个是普通数值,不知道如何用了。请老师帮忙解决一下。

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,解答如下:

1、如果使用一个计算属性实现,此计算属性可以返回一个对象,具体操作如下:

http://img1.sycdn.imooc.com//climg/6042f29e09ab7a1208930668.jpg

http://img1.sycdn.imooc.com//climg/6042f2aa09b1c79c06080234.jpg

在模板中使用:
http://img1.sycdn.imooc.com//climg/6042f2bc09c3ace610970215.jpg

2、不使用计算属性的话,目前这边没有找出比较好的方法。

祝学习愉快~

好帮手慕言 2021-03-05 19:04:10

同学你好,是想只使用一个计算属性的函数实现效果?还是直接不使用计算属性的函数来实现效果呢?可以详细描述下,老师帮助解答呦,祝学习愉快~

  • 提问者 慕妹8003063 #1

    两种方法我都想知道。

    一个计算属性函数是只能返回一个值吗?如果需要返回两个值,要怎么做呢?

    我目前写的这个函数是没使用计算属性的,我执行结果没有成功,我想知道怎么才能让它成功执行。

    麻烦老师了!

    2021-03-05 19:15:20
好帮手慕言 2021-03-05 11:55:42

同学你好,此处需要用到计算属性,按照同学的代码,可以修改如下:
http://img1.sycdn.imooc.com//climg/6041aaa509700b0406850612.jpg

http://img1.sycdn.imooc.com//climg/6041ab34098a056405210457.jpg

http://img1.sycdn.imooc.com//climg/6041ab560913412307090209.jpg

修改后的js代码:

<script>
import { reactive, computed } from "vue";
import { useStore } from "vuex";
import { useRoute } from "vue-router";
const SummaryCartEffect = () => {
  const store = useStore();
  const route = useRoute();
  const shopId = route.params.id;
  const { cartList } = reactive(store.state);
  // 总价
  const totalPrice = computed(() => {
    const goodsList = cartList[shopId];
    let totalPrice = 0;
    if (goodsList) {
      for (let i in goodsList) {
        const product = goodsList[i];
        totalPrice += product.count * product.price;
      }
    }
    return totalPrice.toFixed(2);
  });

  // 总数量
  const goodsNum = computed(() => {
    const goodsList = cartList[shopId];
    let goodsNum = 0;
    if (goodsList) {
      for (let i in goodsList) {
        const product = goodsList[i];
        goodsNum += product.count;
      }
    }
    return goodsNum;
  });

  return { goodsNum, totalPrice };
};
export default {
  name: "Cart",
  setup() {
    const { goodsNum, totalPrice } = SummaryCartEffect();
    return { goodsNum, totalPrice };
  }
};
</script>

祝学习愉快~

  • 提问者 慕妹8003063 #1

    我是觉得这样写代码的重复性太高了,所以考虑能不能写成一个函数来实现两个值的计算。我看也有同学提问了关于computed的问题,慕慕子老师回答,“直接写一个函数也是可以实现效果的。视频中使用Vue自带的computed计算属性,可以认为是老师编写代码的习惯,因为computed计算属性有一个特性,就是它所依赖的数据没有发生改变时,会直接返回之前的结果,不会再次执行函数,所以使用computed比直接定义一个函数这种方式,在一定程度上是可以提升性能的。“ 

    我想知道具体怎么实现。

    2021-03-05 12:56:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师