程序员社区

购物车案例

代码如下
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>
          <button @click="decrement(index)" :disabled="item.count<=1">-</button>
          {{item.count}}
          <button @click="increment(index)">+</button>
        </td>
        <td><button @click="remove(index)">移除</button></td>
      </tr>
      </tbody>
    </table>
    <h2>总价格:{{totalPrice | showPrice}}</h2>
  </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 #e9e9e9;
    border-collapse: collapse; /*表格边框合并*/
    border-spacing: 0;         /*设置相邻单元格间的距离*/
}

th,td {
    padding: 8px 16px;          /*设置页边距(上,右,下,左)*/
    border: 1px solid #e9e9e9;
    text-align: left;           /*文本靠左*/
}

th{
    background-color: #f7f7f7;
    color: #5c6b77;
    font-weight: 600;           /*设置文本粗细,400相当于关键字normal,700等价于bold*/
}

main.js

const app = new Vue({
  el: '#app',
  data: {
    books: [
    {
      id:1,
      name:'《算法导论》',
      date:'2006-9',
      price:85.00,
      count:1
    },
    {
      id:2,
      name:'《UNIX编程艺术》',
      date:'2006-2',
      price:59.00,
      count:1
    },
    {
      id:3,
      name:'《编程珠玑》',
      date:'2008-10',
      price:39.00,
      count:1
    },
    {
      id:4,
      name:'《代码大全》',
      date:'2006-3',
      price:128.00,
      count:1
    },
    ]
  },
  methods:{
    increment(index) {
      this.books[index].count++
    },
    decrement(index){
      this.books[index].count--
    },
    remove(index){
      this.books.splice(index,1);
    }
  },
  computed:{
    totalPrice(){
      let totalPrice=0;
      for(let i in this.books){
        totalPrice += this.books[i].price*this.books[i].count;
      }
      return totalPrice;
    }
  },
  filters:{
    showPrice(price){
      return '¥'+ price.toFixed(2);
    }
  }
})

在这里插入图片描述

<tr> 标签:定义 HTML 表格中的行
HTML 表格有两类单元格:
表头单元 - 包含头部信息(由 th 元素创建)
标准单元 - 包含数据(由 td 元素创建)

在调整价格显示的格式的时候,用到了过滤器
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值v-bind 表达式

<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

toFixed() 方法用来指定小数位数
注意:购买的数量不能小于1,所以动态绑定一个disabled属性,数量小于等于1的时候减号按钮就不能点了
计算总价的时候要用到计算属性

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 购物车案例

一个分享Java & Python知识的社区