Vue实现购物车案例

今天的小案例,用Vue实现购物车小案例,下面是代码以及效果图:
index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <link  rel="stylesheet" href="style.css">
</head>
<body>
<div id="app">
  <div v-if="books.length">
<table>
  <thead>
  <tr>
    <th></th>
    <th>书名</th>
    <th>出版日期</th>
    <th>价格</th>
    <th>购买数量</th>
    <th>操作</th>
  </tr>
  </thead>
  <tbody>
    <tr v-for="(item,index) in books">
      <td>{{item.id}}</td>
      <td>{{item.name}}</td>
      <td>{{item.date}}</td>
      <td>{{item.price|showPrice}}</td>
      <td>
      //数量到1后减按钮不可使用
        <button @click="sub(index)" v-bind:disabled="item.count<=1">-</button>
        {{item.count}}
        <button @click="add(index)">+</button>
      </td>
      <td>
        <button @click="removeHandler">移除</button>
      </td>
    </tr>
  </tbody>
</table>
  <h3>totalPrice:{{totalPrice|showPrice}}</h3>
  </div>
  <h2 v-else>购物车为空!</h2>
</div>
<script src="../js/vue.js"></script>
<script src="main.js"></script>
</body>
</html>

style.css

table{
  border: 1px solid black;
  border-collapse: collapse;
  border-spacing: 0;
}
th,td{
  padding: 8px 16px;
  border: 1px solid #e9e9e9;
}
th{
  background-color: #f7f7f7;
  color: black;
  font-weight: 600;
}

js

const app = new Vue({
  el: '#app',
  data: {
    books:[
      {
        id:1,
        name:'Linux',
        date:'2020-02',
        price:100.00,
        count:1
      },
      {
        id:2,
        name:'Java',
        date:'2020-03',
        price:50.00,
        count:1
      },
      {
        id:3,
        name:'C++',
        date:'2000-02',
        price:10.00,
        count:1
      },
      {
        id:4,
        name:'shell',
        date:'2009-02',
        price:33.00,
        count:1
      }
    ]
  },
  methods:{
    // sumPrice(price){
    //   return "¥" + price.toFixed(2);
    // }
    add(index){
      this.books[index].count++;
    },
    sub(index){
      this.books[index].count--;
    },
    removeHandler(index){
      this.books.splice(index,1)
    }
  },
  computed:{
    totalPrice(){
      let total=0;
      //总价的计算有下面三种方式:
      // 1.
      // for(let i=0;i<this.books.length;i++){
      //   total+=this.books[i].price*this.books[i].count;
      // }
      //return total;
      // 2.
      // for (let item of this.books)
      //   total+=item.price*item.count;
       //return total;
      //3.
      // reduce
      return this.books.reduce(function(preValue,book){
        return preValue+book.price*book.count;
      },0)
    }
  },
  filters:{
    showPrice(price){
    //对价格保留两位小数并加上价格符号
      return "¥" + price.toFixed(2)
    }
  },
})

效果图:
效果图

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值