uniapp-checkbox勾选-刷新清空

案例描述:列表页-可勾选项目(包括全选、全不选)进行操作

问题描述:全选、全不选切换无问题,勾选部分项目-刷新列表(重新请求列表接口即重新渲染列表,不是刷新网页)之后-上次已勾选的项目仍展示勾选样式

解决:刷新列表之后触发勾选初始化操作(写在定时器内)

解决原因:猜测应该是页面渲染先后问题,初始化操作设定一段时间后(页面完全渲染之后)进行

代码示例:主要涉及代码段

<checkbox-group @change="checkboxChange">
    <view v-for="(item, index) in copyWorkOrderList" :key="index">
		<view class="gd-list-title">
			<checkbox class="gd-list-checkbox" color="#fff" :value="item.WorkOrderID" :checked="checkedStatusList[index]" @click="checkBtn(index)"></checkbox>
        </view>
	</view>
</checkbox-group>
<view class="gd-list-btn">
	<button size="mini" @click="checkedAll">{{checked?'全不选':'全选'}}</button>
</view>
/**
checkedList:选中值数组
checked:是否全选
checkedStatusList:数组-存储列表中每一项的checked值
copyWorkOrderList:列表数组
**/

// checkChange事件-获取选中值
checkboxChange(e) {
    this.checkedList = e.detail.value
	if(this.checkedList.length < this.copyWorkOrderList.length) {
		this.checked = false
	} else {
		this.checked = true
	}
},
// 全选
checkedAll() {
	this.checkedList = []
	let items = this.copyWorkOrderList
	if (!this.checked) {
		for(let i=0; i<items.length; i++) {
			this.checkedList.push(items[i].WorkOrderID)
		}
	}
	this.checked = !this.checked
	this.refreshChecked()
},
// 重置列表多选栏
refreshChecked(list) {
	if(list) {
		this.checkedStatusList = []
	} else {
		list = this.checkedStatusList
	}
	for(let i in list) {
		this.checkedStatusList[i] = this.checked
	}
},
// 选中/勾选事件	
checkBtn(index) {
	this.checkedStatusList[index] = !this.checkedStatusList[index]
}
// 本项目中采用监听列表数组变化触发勾选初始化,根据各项目需要,不一定使用watch监听,重点定时器
// 这里的定时时间不敢设置太长,可以根据项目需要设置
watch: {
	copyWorkOrderList: {
		handler(newVal) {
			setTimeout(() => {
				this.checked = false
				this.refreshChecked(newVal)
				this.checkedList = []
			}, 100)
		},
		immediate: true,
		deep: true
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值