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 相关文章推荐
ExtJS Window 最小化的一种方法
Nov 18 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
jQuery表单域属性过滤器用法分析
Feb 10 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
常用的Javascript设计模式小结
Dec 09 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 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中的string类型使用说明
2010/07/27 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python绘制中国大陆人口热力图
2018/11/07 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
关于Keras Dense层整理
2020/05/21 Python
Python datetime模块使用方法小结
2020/06/18 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
资深生产主管自我评价
2013/09/22 职场文书
工商管理应届生求职信
2013/10/07 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
结婚通知短信大全
2015/04/17 职场文书
2015元旦感言
2015/12/09 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书