Vue实现购物车的全选、单选、显示商品价格代码实例


Posted in Javascript onMay 06, 2019

今天中午废了一会时间,总算把项目中的购物车的单选、全选、以及实现数据的动态显示做出来了,给小白分享一下我个人一个解决办法:

购物车的基本页面如下:

Vue实现购物车的全选、单选、显示商品价格代码实例

先说实现的总体思路

  1. 1.给table表中表头th加一个 checkbox,设这两个事件:@click=”checkAll” v-model=”checkall”;
  2. 2.给对应的tr加一个 checkbox 绑定一个事件 v-model=”checked”,checked设为数组,专门放商品Id;
  3. 3.由于checkall默认为false,当我勾选全选框时,将checkall设为true,往checked数组中遍历添加所有商品ID,每列中的checkbox自动选中,此时已经实现全选的取消\选中了,当单选时,应该将checkAll的状态设为false,这样就能实现单选多选了;
  4. 4.最后一步就是对数据的动态显示了,data中绑定两个值,分别是price和count,当我勾选某一列时,通过@click=”xx(price,count,productId)”传值放到页面上;
  5. 5.单选的选中与取消可以通过判断商品id是否存在在数组中,即indexOf(productId)==-1,如果数组中是存在此商品ID,则点击单选框时应减少价格,反之增加。

这是我个人的思路,具体代码实现如下:

html:

<div id="a" class="container">
        <table class="table table-hover" v-if="list.length">
          <thead>
            <tr>
              <th><input type="checkbox" id="box" @click="checkAll" v-model="checkall" /></th>
              <th>图片</th>
              <th>商品名</th>
              <th>数量</th>
              <th>单价</th>
              <th>总金额</th>
              <th>加入时间</th>
              <th>删除</th>
            </tr>
          </thead>

          <tbody>
            <tr v-for="(dateil,index) in list" :key="index">
              <td><input type="checkbox" class="checkbox" v-model="checked"  @click="select(dateil.detailId,dateil.detailProductprice,dateil.detailProductnum)" :value="dateil.detailId" /></td>
              <td><a @click="goShop(dateil.detailProductId)" style="cursor: pointer;"><img v-bind:src="web_server_static+dateil.product.productPhoto"></a></td>
              <td><a @click="goShop(dateil.detailProductId)" style="cursor: pointer;">{{dateil.product.productName}}</a></td>
              <td>{{dateil.detailProductnum}}</td>
              <td>{{dateil.detailProductprice}}</td>
              <td>{{dateil.detailProductprice*dateil.detailProductnum}}</td>
              <td>{{dateil.detailDatetime}}</td>
              <td>
                <button type="button" id="but" @click="del(dateil.detailId)" class="btn btn-danger">删除</button>
              </td>
            </tr>

          </tbody>

        </table>
        <div v-else style="font-size: 25px;text-align: center; margin-top: 300px;height: 100px;">购物车空空如也,请先去购买商品~</div>
        <div id="label_btn">
          <span><label>已选商品<a>{{count}}</a>件,共</a>¥{{price}}</a>元 数组{{checked}}</label>

          </span>
          <span><button type="button" id="btn-close" @click="jiesuan()" class="btn btn-danger">结算</button></span>
        </div>
        <!--结算按钮-->

      </div>

Vue中的数据应该这样写

var vue = new Vue({
        el: '#a',
        data: {
          list: [],
          checkall: false,
           checked: [],
           price:0,
           count:0,
        }

js:

checkAll: function() {
            /**
            *控制全选反选
            */
            var _this = this
            //true的时候是全选,false是不选
            if(this.checkall) {
              // 实现反选,按钮选中时 实现了反选,列表为空
              this.checked = []
              this.price=0;
              this.count=0;
            } else {
              // 实现全选
                this.price=0;
              this.count=0;
              this.checked = []
              this.list.forEach(function(dateil) {
                _this.price+=parseInt(dateil.detailProductprice);
                _this.count+=parseInt(dateil.detailProductnum);
                _this.checked.push(dateil.detailId)
              })
            }
            if(this.checked.length === this.list.length) {
              this.checkall = true
              // console.log(this.checkall)
              // console.log(this.checked)
            }
          }
/**
           * 当单选框选中时
           */
          checkAll: function() {

            var _this = this
            //true的时候是全选,false是不选
            if(this.checkall) {
              // 实现反选,按钮选中时 实现了反选,列表为空
              this.checked = []
              this.price=0;
              this.count=0;
            } else {
              // 实现全选
                this.price=0;
              this.count=0;
              this.checked = []
              this.list.forEach(function(dateil) {
                _this.price+=parseInt(dateil.detailProductprice);
                _this.count+=parseInt(dateil.detailProductnum);
                _this.checked.push(dateil.detailId)
              })
            }
            if(this.checked.length === this.list.length) {
              this.checkall = true
              // console.log(this.checkall)
              // console.log(this.checked)
            }
          }

这样一个购物车的全选、单选、与数据的显示就完成了。

以上所述是小编给大家介绍的Vue实现购物车的全选、单选、显示商品价格详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
详解js闭包
Sep 02 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
微信小程序实现即时通信聊天功能的实例代码
Aug 17 Javascript
vue实现的组件兄弟间通信功能示例
Dec 04 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
countup.js实现数字动态叠加效果
Oct 17 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
JavaScript中关于base64的一些事
May 06 #Javascript
JavaScript中工厂函数与构造函数示例详解
May 06 #Javascript
微信小程序登录数据解密及状态维持实例详解
May 06 #Javascript
一文了解Vue中的nextTick
May 06 #Javascript
angular 服务随记小结
May 06 #Javascript
详解如何使用nvm管理Node.js多版本
May 06 #Javascript
关于AOP在JS中的实现与应用详解
May 06 #Javascript
You might like
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
thinkphp分页集成实例
2017/07/24 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
python传递参数方式小结
2015/04/17 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
python中自带的三个装饰器的实现
2019/11/08 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
应急处置方案
2014/06/16 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS