购物车

img

<!DOCTYPE html>
<html lang="en">
<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">
    <link rel="stylesheet" href="./venders/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="./css/index.css">
    <script src="Vue/vue.js"></script>
    <title>Document</title>
</head>

<body>

    <div class="covers">
    <div class="up-content">
   	<table class="table table-hover">
    <thead>
    <tr id="first">
    <td v-for="item of characters">{{item}}</td>
	</tr>
	</thead>
	 <tbody id="app">
     <tr v-for="(item,index) of lists" :key="index">
        <td>{{index}}</td>
        <td>{{item.bookName}}</td>
        <td>{{item.author}}</td>
        <td>
        	<button class="btn btn-primary" @click="minus(lists,index)">-</button>
        	<span class="count">{{item.counts}}</span>
        	<button class="btn btn-primary" @click="plus(lists,index)">+</button>
        </td>
                        <td class="price">{{item.price}}</td>
                        <td v-if="index%2==0"><button  class="btn btn-success" @click="del(lists,index)">删除</button></td>
                        <td v-if="index%2==1"><button class="btn btn-danger" @click="del(lists,index)">删除</button></td>
                    </tr>
                </tbody>
            </table>
           <p class="total">总价: ¥<span>{{sum}}</span></p>

        </div>

<div class="down-content">

            <p class="form-tit">添加书籍</p>
            <div class="form-group">
                <label for="exampleInputEmail1">书名</label>
                <input type="text" class="form-control" v-model="bookName" placeholder="">
            </div>
            <div class="form-group">
                <label for="exampleInputPassword1">作者</label>
                <input type="text" class="form-control" v-model="author" placeholder="">
            </div>
            <div class="form-group">
                <label for="exampleInputPassword1">单价</label>
                <input type="text" class="form-control" v-model.number="single" id="exampleInputPassword1"
                    placeholder="">
            </div>
            <div class="form-group">
                <label for="exampleInputPassword1">数量</label>
                <input type="text" class="form-control" v-model.number="counts" id="exampleInputPassword1"
                    placeholder="">
            </div>
            <button class="btn btn-primary btn-block" @click="add(lists,index)">添加</button>
            <button class="btn btn-success btn-block" @click="reset(lists,index)">重置</button>
        </div>
    </div>
    <script>
        //tr首行
        new Vue({
            el: '#first',         
            data: {
                characters: ["序号", "书名", "作者", "数量", "价格", "操作"]
            }
        })
        //其他行
        new Vue({
            el: ".covers",
         
            data: {
       	        index: 0,
                orders: "",
                bookName: "",
                author: "",
                counts: null,
                price: null,
                single:null,//单价
                singleArr:[],//单价数组
                totals:[],//总价数组
                countsArr :[],//数量数组
                priceArr :[],//小计数组
                lists: []//tr行渲染
            },
            methods: {
                add(val, index) {

                    if (this.bookName === '') {
                        alert('书名不能为空')
                    }
                    if (this.author === '') {
                        alert('作者不能为空')
                    }
                    if (typeof (this.single) != 'number') {
                        alert('价格为必须为数字且不能为空')
                    }
                    if (typeof (this.counts) != 'number') {
                        alert('数量必须为数字且不能为空')
                    }
                    else {
                        this.lists.push({
                            orders: this.index++,
                            bookName: this.bookName,
                            author: this.author,
                            counts: this.counts,
                            single:this.single,
                            price: this.single*this.counts
                        })                   
                        this.reset()
                       this.countsArr.push(this.lists[index].counts)
                       this.priceArr.push(this.lists[index].price)
                       this.singleArr.push(this.lists[index].single)
                         //总价数组 totals
                       var summation  = this.lists[index].counts*this.lists[index].price                                                       }               },
                reset() {
                    this.bookName = " "
                    this.author = " "
                    this.counts = " "
                    this.single = " "
                },
                del(val, index) {

                    this.lists.splice(index, 1)
                    this.priceArr.splice(index,1)
                    this.index--;//下标递减
                    // console.log(this.lists)
                    // console.log(index)

                },
                plus(val, index) {
                    this.lists[index].counts += 1
                    this.lists[index].price =  this.lists[index].counts*this.lists[index].single
                    this.priceArr.splice(index,1, this.lists[index].price)
                    // console.log(this.lists[index].price)
                    // console.log(this.lists[index].counts)
                    // console.log(this.lists[index].single)
                },
                minus(val, index) {
                    if (this.lists[index].counts > 0) {
                        this.lists[index].counts -= 1
                         this.lists[index].price =  this.lists[index].counts*this.lists[index].single
                         this.priceArr.splice(index,1, this.lists[index].price)
                    }
                }
            }, 
            computed:{
             sum(){                   
                    var res=  this.priceArr.reduce(function(accumulator,currentValue){
                        return accumulator+currentValue
                      },0)
                      return res//reduce求和后return出
                      console.log(res)
                }                
           }
        })
    </script>
</body>
</html>

总结与坑:

  • 组件在使用有标签嵌套规则时,被嵌套的组件不能够直接加载或会影响结构需要使用is绑定方式来加载组件,但是不推荐这样去使用 ,所以table下循环嵌套tr这种就别用组件啦

  • vue的组件只能有一个根节点,即*.vue*文件中的 template标签下只能有一个子元素。

  • 数组reduce方法:

    • array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

    • total:必须,初始值,或者计算后的返回值

    • currentValue:必须,当前元素

    • currentIndex:可选,当前元素的索引值

    • arr:可选,当前元素所属的数组对象

    • InitialValue:可选,传递给数组的初始值

      返回值为计算的结果

    • 求数组项之和

      var sum = arr.reduce(function (prev, cur) {
          return prev + cur;
      },0);
      
    • 求数组项最大值

      var max = arr.reduce(function (prev, cur) {
          return Math.max(prev,cur);
      });
      
    • 数组去重

      var newArr = arr.reduce(function (prev, cur) {
          prev.indexOf(cur) === -1 && prev.push(cur);
          return prev;
      },[]);
      
  • computed内的结果记得要return出,特别是函数套函数,都要return

  • del(val, index) {

                    this.lists.splice(index, 1)
                    this.priceArr.splice(index,1)
                    this.index--;//下标递减
                    // console.log(this.lists)
                    // console.log(index)
    
                },
               //下标递减,否则删除项后,其后的索引值会乱
    
  •   <td v-if="index%2==0"><button  class="btn btn-success" @click="del(lists,index)">删除</button></td>
      <td v-if="index%2==1"><button class="btn btn-danger" @click="del(lists,index)">删除</button></td>
                使用了v-if指令,做奇偶变色
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值