首页 > 解决方案 > 在我单击 Vue Devtools 中的组件之前,计算值不会显示

问题描述

我的计算值有问题。如果我将项目添加到购物车,totalPrice它将保持为 0,直到我单击 Vue Devtools 中的组件,它才会显示该值。但是,Item Count工作正常。为什么会这样?:/

data() {
    return {
      totalPrice: 0,
    };
  },

computed: {
    calcTotal() {
        this.cart.forEach((item) => {
            this.totalPrice += item.price * item.quantity
        });
        return this.totalPrice;
    }
  }

我用它来显示整个购物车的总价。

<div>
  <table class="table">
    <tr v-show="cart.length > 0">
      <td>Item count ({{this.cart.length}})</td>
      <td></td>
      <td><b>Net Payable</b></td>
      <td>{{ totalPrice }}</td>
    </tr>
  </table>
</div>

标签: javascriptlaravelvuejs2vue-component

解决方案


不要data计算属性中改变你的属性。这是结束无限循环的好方法。它们应该尽可能接近纯函数。

totalPrice应该是您的计算属性,将项目减少cart为一个数字(的总和price * quantity

// Adjust locale and currency code accordingly
const currencyFormatter = Intl.NumberFormat("en", { style: 'currency', currency: 'USD' })

export default {
  data: () => ({
    cart: []
  }),
  filters: {
    currency: (value) => currencyFormatter.format(value)
  },
  computed: {
    totalPrice: ({ cart }) =>
      cart.reduce((total, item) => total + item.price * item.quantity, 0)
  }
}
<td>{{ totalPrice | currency }}</td>

另见~过滤器


推荐阅读