当前位置:   article > 正文

vue3 全选 以及取消全选功能_element vue3 checkbox 全选

element vue3 checkbox 全选

首先引用elementplus的模板checkbox多选框

 

(不需要indeterminate状态) 

具体需要实现的功能有:

1.点击全选按钮 所有的小框框都是选中状态

2.当为选中状态时,点击任意条例选中框取消选中状态,则全选也随之取消

3.当手动一个一个将下面的条例选中 全部的条例都是选中状态时 全选自动是选中状态

具体效果图如下

大概思路:

准备两个数组 放数据的id(因为id是唯一的 可以用id判断)

一个将所有数据的id都放进去(checkAmount) 另一个将选中的id放进去(checkedAmount)

通过判断二者是否完全相等来判断是否全选

  1. //获取列表数据的时候将其循环进checkAmount数组 表示全部数据
  2. .then((res) => {
  3. res.data.forEach((item: any) => {
  4. item.list.forEach((i: any) => {
  5. checkAmount.value.push(i.id)
  6. i.flag = false //每一个都绑定一个flag来判断有没有被选中 默认为false
  7. })
  8. })
  9. })
  1. <div class="select-all">
  2. <el-checkbox
  3. v-model="checkAll"
  4. @change="handleCheckAllChange"
  5. class="checkbox"
  6. >全选</el-checkbox>
  7. </div>
  1. <div class="list-content" v-for="(i, k) in item.list" :key="k">
  2. <el-checkbox
  3. class="checkbox"
  4. v-model="i.flag"
  5. @change="handleCheckedCitiesChange(i)"
  6. ></el-checkbox>
  7. {{i.name}}
  8. </div>

具体代码

  1. const checkAll = ref(false)
  2. //定义数据类型
  3. interface IAmount {
  4. id?: string
  5. download?: string
  6. [key: string]: any
  7. }
  8. const checkedUrl = ref<IAmount[]>([])//被选中的url组成的数组 用来写批量下载
  9. const handleCheckAllChange = (val: boolean) => {
  10. if (val) {
  11. //如果是全选的则val返回为true 则令checkAmount数组里的值全部赋给checkedAmount
  12. checkedAmount.value = JSON.parse(JSON.stringify(checkAmount.value))
  13. //这行是为了写批量下载
  14. checkedUrl.value = JSON.parse(JSON.stringify(checkAmount.value))
  15. //如果是全选的 将数据循环让flag全部变为true
  16. allList.data.forEach((item: any) => {
  17. item.list.forEach((i: any) => {
  18. i.flag = true
  19. })
  20. })
  21. } //如果为false则表示 全不选
  22. else {
  23. //那么令checked数组为空
  24. checkedAmount.value = []
  25. checkedUrl.value = []
  26. //循环让flag都变为false
  27. allList.data.forEach((item: any) => {
  28. item.list.forEach((i: any) => {
  29. i.flag = false
  30. })
  31. })
  32. }
  33. }
  34. const handleCheckedCitiesChange = (i: any) => {
  35. //用indexof来检测 被选中的数组里面是否已有现在点击的这条的id
  36. let checkedIndex = checkedAmount.value.indexOf(i.id)
  37. //返回-1表示 无 则把该条的id push进数组并令flag为true
  38. if (checkedIndex == -1 && i.flag) {
  39. checkedAmount.value.push(i.id)
  40. checkedUrl.value.push(i.download)
  41. } else {
  42. //如果有的话checkindex返回所在的index 当本来选中又取消时就需要把此条数据删除
  43. //此时正好用splice 要把本来在里面的所在的index的id从数组里删除
  44. checkedAmount.value.splice(checkedIndex, 1)
  45. checkedUrl.value.splice(checkedIndex, 1)
  46. }
  47. //当两个数组长度相等时 checkALL为true 全选成功
  48. checkAll.value = checkedAmount.value.length === checkAmount.value.length
  49. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/100914
推荐阅读
相关标签
  

闽ICP备14008679号