在工作中频繁用到复选框,于是自己写了个组件,增加其复用性,提高效率。
先看效果图:
提交后得到一个选中项的id组成的数组
下边直接上代码:
代码地址为:components/checkGrop/checkGrop
wxml: - <form bindsubmit="formSubmit">
- <view class='content'>
- <!-- 一级菜单 -->
- <scroll-view class='scrollLeft' scroll-y>
- <block wx:for="{{list}}" wx:key="item">
- <view class="leftBox" catchtap='ontap' data-index='{{index}}' style='{{n==index?"border-left:8rpx solid #1aad16;color:#1aad16":""}}'>
- {{item.istitle}}
- <view class='num' hidden="{{checked[index].length>0?false:true}}">
- <text>{{allNum[index]?allNum[index]:(checked[index].length>0?checked[index].length:0)}}</text>
- </view>
- </view>
- </block>
- </scroll-view>
- <!-- 二级菜单 -->
- <scroll-view class='scrollRight' scroll-y>
- <view class="weui-cells weui-cells_after-title">
- <!-- 二级菜单中的全部选项 -->
- <label class="weui-cell weui-check__label" catchtap='all'>
- <checkbox class="weui-check" value="{{childlist[n][0].value}}" checked="{{childlist[n][0].checked}}" />
- <view class="weui-cell__hd weui-check__hd_in-checkbox">
- <icon class="weui-icon-checkbox_circle" type="circle" size="23" wx:if="{{!childlist[n][0].checked}}"></icon>
- lt;icon class="weui-icon-checkbox_success" type="success" size="23" wx:if="{{childlist[n][0].checked}}"></icon>
- </view>
- <view class="weui-cell__bd">{{childlist[n][0].istitle}}</view>
- </label>
- <checkbox-group bindchange="checkboxChange">
- <!-- 二级菜单中的剩余选项 -->
- <block wx:for="{{childlist[n]}}" wx:key="value">
- <label class="weui-cell weui-check__label" wx:if='{{item.istitle!="全部"}}'>
- <checkbox class="weui-check" value="{{item.id}}" checked="{{item.checked}}" />
- <view class="weui-cell__hd weui-check__hd_in-checkbox">
- <icon class="weui-icon-checkbox_circle" type="circle" size="23" wx:if="{{!item.checked}}"></icon>
- <icon class="weui-icon-checkbox_success" type="success" size="23" wx:if="{{item.checked}}"></icon>
- </view>
- <view class="weui-cell__bd">{{item.istitle}}</view>
- </label>
- </block>
- </checkbox-group>
- </view>
- </scroll-view>
- </view>
- <view class="btn-area">
- <button catchtap='back'>返回</button>
- <button formType="submit">提交</button>
- </view>
- </form>
复制代码wxss: json: js: - Component({
- properties: {
- list: {
- type: Array,
- value: [],
- },
- select:{
- type: Array,
- value: [],
- }
- },
- data: {
- childlist: [],
- n: 0,
- checked: [],
- allNum: [],
- },
- ready(){
- var that=this;
- var list = that.data.list;//传递过来的数据
- // console.log(list)
- var select = that.data.select;
- var checked = new Array;
- var allNum = [];
- var aaa = [];
- // 检查默认选中状态
- for (let i = 0; i < list.length; i++) {
- for (let k = 0; k < list[i].childlist.length; k++) {
- for (let j = 0; j < select.length; j++) {
- if (list[i].childlist[k].id == select[j]) {
- aaa = [];
- // 若某条二级数组中存在多个选中的项要做判断筛选
- if (checked[i]) {
- // check中第i项如果存过值,那么将在此项中继续加入值
- checked[i].forEach(function (item) {
- aaa.push(item);
- })
- aaa.push(list[i].childlist[k]);
- checked[i] = aaa;
- } else {
- // check中第i项没有存过值,那么将值存入第i项
- if (list[i].childlist[k].istitle == "全部") {
- for (let s = 0; s < list[i].childlist.length; s++) {
- list[i].childlist[s].checked = true
- allNum[i] = list[i].childlist.length - 1;
- checked[i] = [list[i]];
- }
- } else {
- checked[i] = [list[i].childlist[k]];
- }
- }
- list[i].childlist[k].checked = true;
- }
- }
- }
- }
- that.setData({
- 'childlist[0]': list[0].childlist,
- list: list,
- checked: checked,
- allNum: allNum,
- })
- console.log(checked);
- console.log(allNum);
- },
- methods: {
- ontap(e) {
- var that = this;
- var n = e.currentTarget.dataset.index;
- var childlist = "childlist[" + n + "]";
- that.setData({
- [childlist]: that.data.list[n].childlist,
- n: n
- })
- },
- all() {
- var that = this;
- var n = that.data.n;
- var childlist = "childlist[" + n + "]";
- var checked = "checked[" + n + "]";
- var allNum = "allNum[" + n + "]";
- var all = "";
- var checkArr = [];
- var checkboxItems = that.data.childlist[n];
- if (checkboxItems[0].checked) {
- checkboxItems[0].checked = true;
- checkArr = [];
- } else {
- checkboxItems[0].checked = false;
- // checkArr.push(checkboxItems[0])
- checkArr.push(that.data.list[n])
- all = checkboxItems.length - 1;
- }
- checkboxItems[0].checked = !checkboxItems[0].checked
- for (let k = 1; k < checkboxItems.length; k++) {
- checkboxItems[k].checked = checkboxItems[0].checked;
- }
- console.log(checkboxItems);
- that.setData({
- [childlist]: checkboxItems,
- [checked]: checkArr,
- [allNum]: all ? all : 0,
- }, function () {
- console.log(that.data.checked);
- })
- },
- checkboxChange(e) {
- var that = this;
- var n = that.data.n;
- console.log('checkbox发生change事件,携带value值为:', e.detail.value)
- var checkboxItems = that.data.childlist[n];
- var values = e.detail.value;
- var flag = "";
- var childlist = "childlist[" + n + "]";
- var checked = "checked[" + n + "]";
- var allNum = "allNum[" + n + "]";
- var checkedArr = [];
- var all = "";
- for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {
- checkboxItems[i].checked = false;
- for (var j = 0, lenJ = values.length; j < lenJ; ++j) {
- if (checkboxItems[i].id == values[j]) {
- checkboxItems[i].checked = true;
- checkedArr.push(checkboxItems[i]);
- break;
- }
- }
- }
- if (values.length == checkboxItems.length - 1) {
- checkboxItems[0].checked = true;
- // checkedArr = [checkboxItems[0]];
- checkedArr = [that.data.list[n]];
- all = checkboxItems.length - 1;
- }
- this.setData({
- [childlist]: checkboxItems,
- [checked]: checkedArr,
- [allNum]: all
- });
- // console.log(checkedArr)
- },
- formSubmit: function (e) {
- var that = this;
- console.log('form发生了submit事件');
- var values = that.data.checked;
- var arr = [];
- var arr1 = [];
- for (let i = 0; i < values.length; i++) {
- if (values[i] != undefined) {
- arr.push(values[i]);
- }
- }
- for (let i = 0; i < arr.length; i++) {
- for (let j = 0; j < arr[i].length; j++) {
- arr1.push(arr[i][j])
- }
- }
- console.log(arr1);//选中的值
- var detail = arr1;
- this.triggerEvent("formSubmit", detail);
- },
- back() {
- this.triggerEvent("back");
- }
- }
- })
复制代码使用方法:
在需要使用的页面的json中声名启用组件
如: - {
- "usingComponents": {
- "check": "/components/checkGrop/checkGrop"
- }
- }
复制代码然后在需要使用的页面的wxml中使用自己起的组件名就好了
如: - <check list="{{hangye}}" select="{{checkedid}}" bind:formSubmit="formSubmit" bindback="back"></check>
复制代码其中list 是你要往组件里传递的数组。 select为默认选中的的数据的id,组件里边的参数可以根据自己的需求更换!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中国红客联盟。 |