uniapp checkbox-group 项循环
<checkbox-group @change="checkboxChange">
<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in items" :key="index">
<view class="box">
<view>
<checkbox color="#D1B37D" :value="item.id" :checked="item.checked" />
</view>
<view class="xuhao">{{index+1}}</view>
<view>{{item.appName}}</view>
<view><text class="red">{{item.integralNum}}</text>积分</view>
</view>
</label>
</checkbox-group>
下面是全选复选框
<view class="wenzi">
<checkbox :checked="allCheck" @click="toqx" />点击全部选中提现
</view>
当点击复选框全选的时候
循环 给每一项 this.$set(item, ‘checked’, this.allCheck)
this.integral是选中的每一项 id
toqx() {
this.allCheck = !this.allCheck
let items = this.items
items.forEach((i, idx) => {
const item = items[idx]
this.$set(item, 'checked', this.allCheck)
})
this.integral = []
if (this.allCheck) {
items.forEach((item, index, array) => {
this.integral.push(item.id)
});
} else {
this.integral = []
}
console.log(this.integral)
},
点击全选时 checkbox-group里每一项视图都显示选中,且 this.integral 数组数据都能拿到完整
取消checkbox-group里的某一项 或 某几项 这时候 视图和数据也是最新正确的
但是再点击全选 会发现 取消的项没选上 视图没更新,但是此时this.integral 数据是最新的 完整的
解决:
data里
someShow: true,
refresh() {
this.someShow = false
this.$nextTick(function() {
this.someShow = true
})
},
将 v-if=“someShow” 放 checkbox-group 上
在全选事件里调用 this.refresh() 方法
原理:
一个事件循环中发生的所有数据改变都会在下一个事件循环的Tick中来触发视图更新,这也是一个“批处理”的过程。
理解的还不是很透彻 待更新.