Vue实现书籍购物车_h5 vue3书籍购物车,最新前端架构师成长路线

40 阅读1分钟
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <!--导入CSS文件-->
  <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>
            <button @click="decrement(index)" v-bind:disabled="item.count <= 1">-</button>
            {{item.count}}
            <button @click="increment(index)">+</button>
          </td>
          <td><button @click="removeHandle">移除</button></td>
        </tr>
        </tbody>

      </table>
      <h2>总价格:{{totalPrice | showPrice}}</h2>
  </div>
  <h2 v-else>购物车为空,请添加书籍</h2>
</div>
<!--从CDN引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
<script src="main.js"></script>
<script>

</script>

</body>
</html>

在这里插入图片描述

main.js文件

const  app = new Vue({
  el: '#app',
  data: {
    books: [
      {
        id: 1,
        name: '《JavaScript百炼成仙》',
        date: '2020-09',
        price: 128.00,
        count: 1
      },
      {
        id: 2,
        name: '《Spring Boot+Vue全栈开发实战》',
        date: '2021-02',
        price: 89.00,
        count: 1
      },
      {
        id: 3,
        name: '《Python Django Web 从入门到项目实战》',
        date: '2021-09',
        price: 128.00,
        count: 1
      },
      {
        id: 4,
        name: '《Prometheus云原生监控 运维与开发实战》',
        date: '2020-06',
        price: 89.00,
        count: 1
      },
      {
        id: 5,
        name: '《Kubernetes进阶实战》',
        date: '2021-03',
        price: 149.00,
        count: 1
      },
    ]
  },
  methods: {
    // getFinalPrice(price) {
    // return '¥' + price.toFixed(2)
    // }
    decrement(index) {
     // console.log('decrement',index);
      this.books[index].count--
    },
    increment(index) {
      //console.log('increment',index);
      this.books[index].count++
    },
    removeHandle(index) {
      this.books.splice(index, 1)
    },
  },
  computed: {
    totalPrice() {
      let totalPrice = 0
      for (let i = 0; i < this.books.length; i++) {
        totalPrice += this.books[i].price \* this.books[i].count
      }
      return totalPrice
    }
  },

  filters: {
    showPrice(price) {
      return '¥' + price.toFixed(2)
    }
  }
})



### 最后



>![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0b0d788219a949f9b0138b394117ace0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1771407261&x-signature=yCQlzXfMVqFqqJ%2FMHY9d3Md0rQg%3D)
**开源分享:https://docs.qq.com/doc/DSmRnRGxvUkxTREhO**