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 相关文章推荐
jquery获取table中的某行全部td的内容方法
Mar 08 Javascript
在javascript中对于DOM的加强
Apr 11 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
JavaScript基础教程——入门必看篇
May 20 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
Sep 28 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
详解javascript appendChild()的完整功能
Aug 18 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
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
php遍历数组的方法分享
2012/03/22 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript制作2048游戏
2015/03/30 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
fetch 如何实现请求数据
2018/12/20 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
工地标语大全
2014/06/18 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2014年导购员工作总结
2014/11/18 职场文书
房屋认购协议书
2015/01/29 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
家庭经济困难证明
2015/06/23 职场文书
感恩教师节主题班会
2015/08/12 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL