超出最大调用堆栈大小 - Vue.js

时间:2018-02-28 20:43:47

标签: javascript vue.js

我有一个计算方法,可以让我计算我的产品和折扣价值的总价,并希望得到以下价值:总折扣。

cartTotal() {
    var total = 0;
    var discount = Math.round((0.1 * this.cartTotal) * 100) / 100;
    this.cart.items.forEach(function(item) {
      total += item.quantity * item.product.price;
    });
    total -= discount;
    return total;
}

Doens不适合我,我得到Maximum call stack size exceeded错误。

1 个答案:

答案 0 :(得分:3)

您收到该错误是因为您有两个相互引用的计算属性'值。无论何时这样做,您都会创建一个循环依赖项,这将产生一个"超出最大调用堆栈大小"错误。

你真的有三个价值你正在处理1)购物车中所有价值的总和,2)折扣金额,以及3)总和减去折扣的总价值。

您应该有三个计算属性:

computed: {
  cartSum() {
    return this.cart.items.reduce((n, i) => n += i.quantity * i.product.price, 0);
  },
  discountValue() {
    return Math.round((0.1 * this.cartSum) * 100) / 100;
  },
  cartTotal() {
    return this.cartSum - this.discountValue;
  },
}