vscode——VUE 书籍购物车

10 篇文章 1 订阅
1 篇文章 0 订阅

B站vuejs视频中的案例

成果如下:

这是部署框架的代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>书籍购物车</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

  <!-- <link rel="stylesheet" href="style.css"> 引入文件
  <script src="main.js"></script> -->

  <style>
    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;
    }
  </style>

</head>

<body>

  <!-- 书籍购物车 -->
  <div id="app">
  <table>
    <thead>  <!-- 标题-->
      <tr> <!-- 行-->
        <th></th> <!-- 列 -->
        <th>书籍名称</th>
        <th>出版日期</th>
        <th>价格</th>
        <th>购买数量</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody>  <!-- 内容 -->
      <tr v-for='item in books'>
        <!-- <td v-for='value in item'>{{value}}</td> -->
        <td>{{item.id}}</td>
        <td>{{item.name}}</td>
        <td>{{item.data}}</td>
        <td>{{item.price}}</td>
        <td>
          <button>-</button>
          {{item.count}}
          <button>+</button>
        </td>
        <td><button>移除</button></td>
      </tr>
    </tbody>
  </table>
  </div>

  <script>
    var app= new Vue({
      el: '#app',
      data: {
        books:[
          {
            id:1,
            name:'《数学》',
            data:'2018-06',
            price: 35.00,
            count:1
          },
          {
            id:2,
            name:'《物理》',
            data:'2018-06',
            price: 45.00,
            count:1
          },
          {
            id:3,
            name:'《英语》',
            data:'2020-06',
            price: 25.00,
            count:1
          },
          {
            id:4,
            name:'《音乐》',
            data:'2019-06',
            price: 15.00,
            count:1
          },
        ]
      },
        methods: {
          
        },
    });
  </script>
</body>

</html>

成果如下:

 跟成果相比,价格那列没有保留两位小数且没有“¥”符号,以及购买和操作那里的按钮还没实现其功能

价格保留两位小数的实现:
        <td>{{'¥'+item.price.toFixed(2)}}</td>

或者利用methods方法:

 <td>{{getPrice(item.price)}}</td>


 methods: {
          getPrice(price){
            return '¥'+ price.toFixed(2)
          }
        }

或者利用过滤器:

<td>{{item.price | showPrice}}</td>

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

购买和操作的功能实现:

 <tr v-for='(item,index) in books'>
        <td>
          <button @click="div(index)" :disabled = "item.count <= 1">-</button>
          {{item.count}}
          <button @click="add(index)">+</button>
        </td>
        <td><button @click = "remove(index)">移除</button></td>
 </tr>


methods: {
          div(index){
            this.books[index].count--
          },
          add(index){
            this.books[index].count++
          },
          remove(index){
            this.books.splice(index,1)
          }
        }

总体代码如下:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>书籍购物车</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

  <!-- <link rel="stylesheet" href="style.css"> 引入文件
  <script src="main.js"></script> -->

  <style>
    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;
    }
  </style>

</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 v-for='value in item'>{{value}}</td> -->
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>{{item.data}}</td>
    
            <!-- <td>{{'¥'+item.price.toFixed(2)}}</td> -->
            <!-- <td>{{getPrice(item.price)}}</td> --><!-- methods -->
            <td>{{item.price | showPrice}}</td>
    
            <td>
              <button @click="div(index)" :disabled = "item.count <= 1">-</button>
              {{item.count}}
              <button @click="add(index)">+</button>
            </td>
            <td><button @click = "remove(index)">移除</button></td>
          </tr>
        </tbody>
      </table>
      <h2>总价格:{{price |  showPrice}}</h2>
    </div>
    <h1 v-else>购物车为空</h1>
  </div>

  <script>
    var app= new Vue({
      el: '#app',
      data: {
        books:[
          {
            id:1,
            name:'《数学》',
            data:'2018-06',
            price: 35.00,
            count:1
          },
          {
            id:2,
            name:'《物理》',
            data:'2018-06',
            price: 45.00,
            count:1
          },
          {
            id:3,
            name:'《英语》',
            data:'2020-06',
            price: 25.00,
            count:1
          },
          {
            id:4,
            name:'《音乐》',
            data:'2019-06',
            price: 15.00,
            count:1
          },
        ]
      },
        methods: {
          // getPrice(price){
          //   return '¥'+ price.toFixed(2)
          // }
          div(index){
            this.books[index].count--
          },
          add(index){
            this.books[index].count++
          },
          remove(index){
            this.books.splice(index,1)
          }
        },
        filters:{//过滤器——函数
          showPrice(price){
            return '¥'+ price.toFixed(2)
          }
        },
        computed: {
          price:function(){
            let result = 0
            for(let i=0;i<this.books.length;i++){
              result += this.books[i].price * this. books[i].count
            }
            return result
          }
        },
    });
  </script>
</body>

</html>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值