前端基础学习-el-checkbox-group实现全选

前端基础学习-el-checkbox-group实现全选

其实这一块在element有具体说明
在这里插入图片描述
这里想要补充的一点是,checkbox勾选的数组中的数据项绑定的是label,在我的代码里多了一个对绑定label对应数据的过滤
先看一下效果
在这里插入图片描述

我这里checkbox中label绑定的是name
那么我要实现全选的效果,需要将我原数组中的所有数据项的name过滤组成一个新数组,再将其赋值给选中的数组

<template>
  <div>
    <el-dialog title="发送人员" :visible.sync="sendVisible" width="27%" @close="handelClose">
      <el-form :model="sendForm" ref="sendForm" :rules="rules">
        <el-form-item prop="usersList" label="">
          <div style="width:97%;background-color:#F8F8F9;padding-left:3%;border:1px solid #DEDFE3">
            <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
          </div>
          <!-- 这里设置height,后面overflow滚动条才有用 -->
          <div style="border:1px solid #DEDFE3;border-top: none;padding-left:3%;width:97%;height:300px;">
            <el-checkbox-group v-model="sendForm.usersList" @change="changeChecked" style="overflow-y: auto;height:100%;max-height:100%">
              <el-checkbox v-for="item in userArr" :key="item.id" :label="item.name" style="width:30%;margin-right:0"></el-checkbox>
            </el-checkbox-group>
          </div>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="handelClose">取 消</el-button>
        <el-button type="primary" @click="handleConfirm">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
export default {
  props: {
    memberList: {
      type: Array
    }
  },
  data () {
    return {
      sendVisible: false,
      // checkbox全选
      isIndeterminate: true,
      checkAll: false,
      userArr: [],
      nameArr: [],
      sendForm: {
        usersList: []
      },
      rules: {
        usersList: [
          { required: true, message: '请勾选用户', trigger: 'blur' }
        ]
      }
    }
  },
  watch: {
    sendVisible: {
      handler (visible) {
        if (visible) {
          this.userArr = this.memberList
          // 勾选的数组绑定的是数组中的item.name(label),这里要过滤出全为name的数组
          let tempNameArr = []
          this.memberList.forEach(item => {
            tempNameArr.push(item.name)
          })
          this.nameArr = tempNameArr
        }
      },
      immediate: true,
      deep: true
    }
  },
  mounted () {
  },
  methods: {
    changeChecked (value) {
      // console.log(value, '勾选value')
      let checkedCount = value.length
      this.checkAll = checkedCount === this.nameArr.length
      this.isIndeterminate = checkedCount > 0 && checkedCount < this.nameArr.length
    },
    handleCheckAllChange (val) {
      // console.log(val, '全选value')
      this.sendForm.usersList = val ? this.nameArr : []
      this.isIndeterminate = false
    },
    handleConfirm () {
      this.$refs['sendForm'].validate((valid) => {
        if (valid) {
          this.$message.success('发送成功!')
          this.$emit('memSend')
          this.sendVisible = false
        }
      })
    },
    handelClose () {
      this.sendVisible = false
      this.$refs.sendForm.resetFields()
    }
  }
}
</script>

<style>

</style>


这里的memberList是父组件传来的list

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值