使用复选框,实现全选,单独选中等需求功能

在这里插入图片描述

在这里插入图片描述

需求

  • 当我点击单个复选框,将内容添加到右侧
  • 当我复选框全部点击后,将内容添加到右侧,全选按钮自动勾选
  • 当我点击全选按钮,左侧内容全部勾选,右侧内容已添加
  • 当我取消全选按钮,右侧内容都删除,左侧的复选框全部取消勾选
  • 当我点击右侧删除按钮,删除右侧内容,左侧复选框取消勾选

实现

html,拿到数据后,先将左侧数据渲染到页面上

/* 左侧部分 */
<div class="left">
    <ul class="memberList">
       <li v-for="(item,index) in memberList" :key="index">
        <el-avatar 
        :src="item.admin_info?item.admin_info.avatar:''" />
        <span>{{ item.name }}</span>
        <el-checkbox 
        v-model="item.checked"
        @change="changeCheckbox(item)" />
       </li>
    </ul>
    <el-checkbox 
	    v-model="checked" 
	    @change="allSelect"
	 >全选</el-checkbox>
</div>
/* 右侧部分 */
<div class="right">
   <ul class="memberList">
      <li v-for="(it,ind) in seletList" :key="ind">
        <el-avatar :src="it.admin_info?it.admin_info.avatar:''" />
        <span>{{ it.name }}</span>
        <i class="el-icon-close close" @click="deleteFn(it,ind)" />
       </li>
    </ul>
</div>

js部分

export default {
	data(){
	return{
		memberList: [],
      	seletList: [],
      	checked: false,
		}
	},
	methods:{
	// 点击单个复选框
    changeCheckbox(item) {
    //如果点击了单选按钮,则添加到右侧数组里,如果再次取消,则判断点的按钮在
    //数组中是否存在,如果存在,找出下标,删除
      if (item.checked) {
        this.seletList.push(item)
      } else {
        const res = this.seletList.findIndex(it => {
          return item.name === it.name
        })
        this.seletList.splice(res, 1)
      }
      const res = this.memberList.findIndex(it => {
        return it.checked === false
      })
      if (res === -1) {
        this.checked = true
      } else {
        this.checked = false
      }
    },
     //  点击全选
    allSelect() {
      if (this.checked) {
        this.memberList.forEach(item => {
          item.checked = true
          this.seletList.push(item)
        })
      } else {
        this.memberList.forEach(item => {
          item.checked = false
        })
        this.seletList = []
      }
    },
     // 删除单个复选框
    deleteFn(it, ind) {
      this.seletList.splice(ind, 1)
      this.checked = false
      this.memberList.forEach(ite => {
        if (ite.name === it.name) {
          ite.checked = false
        }
      })
    },
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值