• List item

vue3实现全选/全不选功能


实现逻辑就是全选按钮的选中与否依赖,所有的子复选框是否选中,
通过计算属性的 get()跟set()方法绑定 全选按钮的值.

<template>
  <div class="container">
    <input type="checkbox" v-model="checkAll"/>全选/不全选
    <p v-for="item,index in list" :key="index">
    <input type="checkbox" v-model="item.checked"/>{{ item.label}}
    </p>
  </div>
</template>
<script setup lang="ts">
import { computed, reactive, toRefs } from 'vue';
    let state = reactive({
        list:[{label:"张无忌",value:1,checked:false},{label:"张翠山",value:2,checked:false},{label:"张三丰",value:3,checked:false}],
    })

    let {list,checkList} = toRefs(state)
    //将checkAll定义成计算属性
    let checkAll = computed({
        get(){
           let flag = list.value.map((item)=>{
                if(item.checked == false){
                    return false
                }else{
                    return true
                }
                
            })
            return !flag.includes(false)
        },
    
        set(newVal){
            if(newVal){
                 list.value.map((value,_index,_array)=>{
                    value.checked = true
                })
            }else{
                list.value.map((value,_index,_array)=>{
                    value.checked = false
                })
            }
        }
    })

</script>

效果如下:
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐