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 相关文章推荐
验证码按回车不变解决方法
Mar 29 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
JQuery fileupload插件实现文件上传功能
Mar 18 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
vue2.0获取自定义属性的值
Mar 28 Javascript
详解vue express启动数据服务
Jul 05 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
webpack4 CSS Tree Shaking的使用
Sep 03 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 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
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
js实现计算器功能
2020/08/10 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
护士的岗位职责
2013/12/04 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
幸福家庭标语
2014/06/27 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
2015年元旦标语大全
2014/12/09 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书