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
	}
}

 

uniapp是一个基于Vue.js的跨平台开发框架,可以用于开发iOS、Android、H5等多个平台的应用程序。u-checkbox-group和u-checkboxuniapp中的两个组件,用于实现多选功能和数据回显。 u-checkbox-group是一个多选框组的容器,可以包含多个u-checkbox组件。它通过v-model绑定一个数组来实现数据的双向绑定。当用户选择或取消选择某个u-checkbox时,对应的数据会自动添加或移除到绑定的数组中。 u-checkbox是一个单个的多选框,可以通过v-model绑定一个布尔值来表示是否选中。当用户选择或取消选择该多选框时,绑定的布尔值会自动更新。 要实现数据回显,首先需要在data中定义一个数组来存储选中的数据。然后,在u-checkbox-group中使用v-model绑定该数组。当需要回显数据时,只需要将对应的数据添加到数组中即可。 以下是一个示例代码: ``` <template> <view> <u-checkbox-group v-model="selectedItems"> <u-checkbox v-for="item in items" :key="item.id" :label="item.id" :value="item.name">{{ item.name }}</u-checkbox> </u-checkbox-group> <button @click="showSelectedItems">显示选中的数据</button> </view> </template> <script> export default { data() { return { items: [ { id: 1, name: '选项1' }, { id: 2, name: '选项2' }, { id: 3, name: '选项3' } ], selectedItems: [] }; }, methods: { showSelectedItems() { console.log(this.selectedItems); } } }; </script> ``` 在上面的示例中,items数组存储了所有的选项数据,selectedItems数组用于存储选中的数据。当用户选择或取消选择某个选项时,selectedItems数组会自动更新。点击"显示选中的数据"按钮时,会将选中的数据打印到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值