vue 基础 案例 :书籍购物车

vue 案例 :书籍购物车

一、HTML

       <div id="app">
          <div v-if="books.length>0">
            <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>{{getFinallPrice(item.price)}}</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="removeHandler(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>

二、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;
  }

三、JavaScript

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:{
        getFinallPrice(price){
            return '¥' + price.toFixed(2)
        },
        increment(index){
           return this.books[index].count++
        },
        decrement(index){
            return this.books[index].count--
        },
        removeHandler(index){
           return this.books.splice(index,1)
        }
    },
    computed:{
        totalPrice(){
            //1.普通 for 循环
            // let totalPrice = 0;
            // for(let i=0;i<this.books.length;i++){
            //     totalPrice += this.books[i].price * this.books[i].count
            // }
            // return totalPrice

            // 2.for(let i in/of this.books) 拿到的是索引
            // let totalPrice = 0
            // for(let i in this.books){
            //     totalPrice += this.books[i].price * this.books[i].count
            // }
            // return totalPrice

            //3.for (let i of this.books)  拿到的是 book
            // let totalPrice = 0
            // for(let item of this.books){
            //     totalPrice += item.price * item.count
            // }
            // return totalPrice


            //reduce(高阶函数)
            return this.books.reduce(function(pre,book){
                return pre + book.price * book.count
            },0)
        }
    },
    filters:{
        showPrice(price){
            return '¥' + price.toFixed(2)
        }
    }
});

实现步骤:

  • 1.data中定义books

  • 2.app中 v-for 遍历出书的 信息

  • 3.购买数量中 绑定 增加 increment(index)" 减少 decrement(index) 的事件

  • 4.设置减少的边界 当总数 小于1 的时候 不能选中
    v-bind:disabled="item.count <= 1 "

  • 5在methods中实现 增加 减少 的方法
    1.通过点击按钮传递的id 找到对应的count 让 它 ++ 或则 –
    2.return this.books[index].count++
    3.return this.books[index].count –

  • 6.实现移除
    1.给移出按钮绑定事件 并传递索引
    2.在methods中实现移出方法(用splice(要删除的索引,个数))
    3.return this.books.splice(index,1)

  • 7.实现价格 有两种方法
    1.计算属性
    2.在computed中 定义 totalPrice方法
    3.普通 for循环遍历数组 或则高阶语法 (reduce)
    4.reduce : 参数 1 :是一个函数 参数2 :是一个0
    5.第一次执行的时候 pre 为 0(初始值)+ 传递过来第一本数的单价*数量
    6.第二次执行的时候 pre 为第一次执行的结果 + 传递过来的 第二本数的单价 * 数量 。。。。。

  return this.books.reduce(function(pre,book){
     return pre + book.price * book.count
 },0)
  • 8.过滤价格
    1.传递来一个 price
    2.return ‘¥’ + price.toFixed(2)
    3.最后在app中用插值 使用
    4.书的价格 {{item.price | showPrice}}
    5.总价格 {{totalPrice | showPrice}}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值