小程序 双重 for 模板渲染 和 数据处理
自己在开发中 遇到双重循环 处理 data中数据。 还有 对选中 数据进行处理。
html 部分
<view class="listbox" style="padding-top: 20rpx;"> <block wx:for="{{list}}" wx:key="index"> <view class="item" > <checkbox class="checkzhi" value="{{item.id}}" checked="{{item.bool}}"/><text data-index="{{index}}" catchtap="clickCheck" class="sontitle">{{item.id}}</text> <view class="bg" wx:if="{{item.bool && item.childNodes}}"> <view class="viewson" wx:for="{{item.childNodes}}" wx:for-item="Item" wx:for-index="id" wx:key="id"> <checkbox class="checkzhison" value="{{Item.id}}" checked="{{Item.boolson}}"></checkbox> <text data-key='{{id}}' data-faindex="{{index}}" catchtap="sonProject" class="block">{{Item.id}}</text> </view> </view> </view> </block> </view>
js 数据部分
list:[], list1:[ // 0-6分 { id: '续保提醒', bool:false, childNodes:[ { id: '未提醒或提醒不及时', boolson: false}, { id: '电话销售频繁', boolson:false} ]}, { id: '产品和价格', bool: false, childNodes:[ { id: '产品方案不合理', boolson: false}, { id: '价格较高', boolson: false }, { id: '增值服务不实用', boolson: false} ] }, { id: '缴费和出单', bool: false, childNodes: [ { id: '缴费麻烦', boolson: false}, { id: '出单不及时', boolson: false} ] }, { id: '保单配送', bool: false, childNodes: [ { id: '保单配送不及时', boolson: false} ] }, { id: '销售服务人员', bool: false, childNodes: [ { id: '服务不专业', boolson: false}, { id: '服务态度差', boolson: false} ] }, { id: '其他', bool: false } ],
示例图 样子, 点击提交 把 选中数据提交给后台,json格式。
submit:function(){ let listdata = this.data.list; let list = JSON.parse(JSON.stringify(listdata)) // 深拷贝 list = list.filter((item)=>{ // 父级 选中 true 时,放在一个数组中 return item.bool===true }) for(let i of list){ // 循环父级中子集中有 boolson为true时,放在childNodes数组中 if (i.childNodes){ i.childNodes = i.childNodes.filter((item) => { return item.boolson === true }) } } console.log(list) for (let i of list){ // 删除 父级 bool 属性, delete i.bool; if (i.childNodes){ for (let j of i.childNodes){ delete j.boolson //删除有childNodes数组中 子集有 boolson属性 } } } console.log(list) let sometrue = list.some(function (item, index, array) { // 如果数组中 子集没有一项 被选 ,为false if (item.childNodes){ return item.childNodes.length == 0; }}) if (sometrue || list.length == 0){ console.log('有没选择的'); wx.showToast({ title: '有服务没被选择!', icon: 'none' }) }else{ console.log('可以了') let payNo = this.data.options.payNo; let param = { url: api.updateEvaluate, contentType: 'application/json;charset=UTF-8', data: { nodes: list||[], userCode: wx.getStorageSync('userCode') || '', payNo: payNo } } ajax(param).then(res => { if (res.code == 1) { console.log('提交成功') wx.navigateTo({ url: '../npsVisit2/npsVisit2?payNo=' + this.data.options.payNo, }) } else { wx.showToast({ title: '提交失败', icon: 'none' }); } }) } },
提交数据格式
爱生活、爱编程!