如何计算Vue js的折扣

时间:2018-05-02 11:17:20

标签: javascript vue.js vuejs2

我有一个包含一些字段的简单数据库。字段如下:id,product_name,original_price,discount 折扣字段以百分比表示。 我使用Axios获取所有数据并使用v-for在页面上呈现 代码:

<ul v-for="product in products">
   <li>@{{product.product_name}}</li>
   <li>@{{product.original_price}}</li>
   <li>@{{product.discount}}</li>
</ul>

这里我想显示折扣后的计算价格。我可以在Vue实例中创建一个方法 像这样:

      calculateDiscount: function(orig_price, discount){
                         this.discount_amt = discount/100*orig_price;
                         return this.after_discount = orig_price - this.discount_amt;
    }

如果我创建了这个方法,我怎样才能在渲染时调用这个方法请帮忙。

3 个答案:

答案 0 :(得分:1)

您不能使用计算属性,因为您需要对产品中的每个产品进行计算,并且计算属性不能采用任何参数。
您可以改用方法:

test=['S123X_ILL_BE_BACK','BA34_HASTA_LA_VISTA_BABY','JA3841_SARAH','J102_CONNOR']

答案 1 :(得分:0)

在您的服务器端进行该计算,只需将 after_discount 指定为每个产品的最终折扣,您就可以显示以下折扣。

   <ul v-for="product in products">
       <li>@{{product.product_name}}</li>
       <li>@{{product.original_price}}</li>
       <li>@{{product.discount}}</li>
       <li>@{{product.after_discount}}</li>
   </ul>

希望有所帮助。

答案 2 :(得分:0)

你可以使用过滤器

&#13;
&#13;
var app = new Vue({
  el: '#app',
  data () {
    return {
      list: [{
        product_name: 'name',
        original_price: 300,
        discount: 8.5
      },{
        product_name: 'name',
        original_price: 1200,
        discount: 7.5
      },{
        product_name: 'name',
        original_price: 3000,
        discount: 5.5
      }]
    }
  },
  filters: {
    priceAfterDiscount (v,discount) {
      return (v * discount / 10).toFixed(2);
    }
  }
})
&#13;
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<div id="app">
    <ul v-for="item of list">
      <li>product: {{item.product_name}}</li>
      <li>price: {{item.original_price}}</li>
      <li>discount: {{item.discount}}</li>
      <li>priceAfterDiscount: {{item.original_price | priceAfterDiscount(item.discount)}}</li>
    </ul>
</div>
&#13;
&#13;
&#13;