微信小程序> 微信小程序自定义单选复选按钮组的实现(用于实现购物车产品列表功能)

微信小程序自定义单选复选按钮组的实现(用于实现购物车产品列表功能)

浏览量:791 时间: 来源:weixin_34413103

 

(一)单选按钮组

模型图如下: 

小程序

index.js

Page({  data: {    parameter: [{ id: 1, name: '银色' }, { id: 2, name: '白色' },{ id: 3, name: '黑色' }],//模拟商品参数数据,如果是线上版本需要自行发起request请求  },  onLoad: function (options) {     this.data.parameter[0].checked = true;    this.setData({      parameter: this.data.parameter,    })//默认parameter数组的第一个对象是选中的  },   // 参数点击响应事件  parameterTap:function(e){//e是获取e.currentTarget.dataset.id所以是必备的,跟前端的data-id获取的方式差不多    var that=this    var this_checked = e.currentTarget.dataset.id    var parameterList = this.data.parameter//获取Json数组    for (var i = 0; i  parameterList.length;i++){      if (parameterList[i].id == this_checked){        parameterList[i].checked = true;//当前点击的位置为true即选中      }      else{        parameterList[i].checked = false;//其他的位置为false      }    }    that.setData({      parameter: parameterList    })  }})

index.wxml

view class='fwb fz-28 mgt-16 mgb-10'规格/view  view class='parameter-wrap'    block wx:for="{{parameter}}" wx:key="parameter"    text class='parameter-info text-over {{item.checked?"checked_parameter":""}}' data-id='{{item.id}}' bindtap='parameterTap'{{item.name}}/text    /block  /view

index.wxss

.checked_parameter{  background: rebeccapurple;  padding: 3px;  border-radius: 5px;  color: #fff;}

 

Tips:此处的{{item.checked?”checked_parameter”:”“}}为三元选择器,即通过checked判断当前是否为选中样式,而后进行样式的添加checked_parameter。

 

(二)多选按钮组

模型图如下:

小程序

cartList.js

Page({    data:{    CartList:[],//做空处理,如果购物车为空后端的值没有改变,容易产生报错
  //测试数据:
CartList: [{id: 1, name: '银色', checked: false},{id: 2, name: '白色', checked: false},{id: 3, name: '黑色', checked: true}]
    },      onLoad: function () {    // 获取购物车请求    var that = this;    wx.request({      url: request_getCartList,//向后端发起请求,此处的是get的方式,如需要ajax请参照本站内的相关文章      data: {        "session3rd": userid,      },      success: function (res) {        if (res.data.code == -2) {          that.setData({            CartList: []          })        }        if(res.data.code==1){          that.setData({            CartList: list          })         }       }    })  },    // 多选  chooseOs: function (event) {    for (var i = 0; i  this.data.CartList.length; i++) {      if (event.currentTarget.id == this.data.CartList[i].id) {        if (this.data.CartList[i].checked == true) {          this.data.CartList[i].checked = false;          var CartList = this.data.CartList;          this.setData({            CartList//重定义CartList,使购物车的样式实现局部刷新          })        } else {          this.data.CartList[i].checked = true;          var CartList = this.data.CartList;          this.setData({            CartListt//重定义CartList,使购物车的样式实现局部刷新          })        }      }    }  },})

cartList.wxml

  block wx:for="{{CartList}}" wx:key=""    view class="order-out user-shadow mgb-20 nowrap"      view class="check-btn" catchtap='chooseOs' id="{{item.id}}"        image class="absoult-v" src="{{imgSrc}}{{item.checked?'type_1':'type_0'}}.png" mode="widthFix"/image      /view    /view  /block

Tips:前端页面通过catchtap的事件捕捉的方式,调用chooseOs的方法,获取当前点击对象的id即id=”{{item.id}}”,然后对选中的事件添加样式this.data.CartList[i].checked = true;,对未选中的事件删除样式this.data.CartList[i].checked = false;

 

(三)复选拓展-全选全不选

 

cart.xml

 view class="all-btn" bindtap='allCheckTap' wx:if="{{!checked}}"    image src="{{imgSrc}}{{checked?'type_1':'type_0'}}.png" mode="widthFix"/image    text全选/text  /view  view class="all-btn" bindtap='allCheckTap' wx:if="{{checked}}"    image src="{{imgSrc}}{{checked?'type_1':'type_0'}}.png" mode="widthFix"/image    text全不选/text  /view

Tips:此处的‘全选’和‘全不选’没有合并,需要小码农们自行整合。 


cartList.js

// 全选按钮  allCheckTap: function () {    this.setData({      checked: !this.data.checked,    })    if (this.data.checked) {      for (var i = 0; i  this.data.CartList.length; i++) {        if (this.data.CartList[i].checked !== true) {          this.data.CartList[i].checked = true;          var CartList = this.data.CartList;          this.setData({            CartList          })        }      }    }    else {      for (var i = 0; i  this.data.CartList.length; i++) {        if (this.data.CartList[i].checked == true) {          this.data.CartList[i].checked = false;          var CartList = this.data.CartList;          this.setData({            CartList          })        }      }    }  },

tips:全选跟全部不选的逻辑比较简单就是,将所有所有的checked循环遍历this.data.CartList[i].checked == true或false,然后通过this.setData({CartList})重新定义一下,实现局部刷新。

 

 

转 : https://blog.csdn.net/qq_38209578/article/details/78810981

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎