定义简单的页面复选框实现全选操作

1. 效果演示

2. 弹窗代码 

<el-dialog title="分配角色" :visible.sync="dialogRoleVisible">
  <el-form label-width="80px">
    <el-form-item label="用户名">
      <el-input disabled :value="sysUser.username"></el-input>
    </el-form-item>

    <el-form-item label="角色列表">
      <el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
      <div style="margin: 15px 0;"></div>
      <el-checkbox-group v-model="originalRoleList" @change="handleCheckedChange">
        <el-checkbox v-for="role in allRoles" :key="role.id" :label="role.id">{{role.roleName}}</el-checkbox>
      </el-checkbox-group>
    </el-form-item>
  </el-form>
  <div slot="footer">
    <el-button type="primary" @click="assignRole" size="small">保存</el-button>
    <el-button @click="dialogRoleVisible = false" size="small">取消</el-button>
  </div>
</el-dialog>

 这里的每个复选框绑定每个角色的 id

3. 变量阐述

originalRoleList 存放从后端获取到的当前员工对应的角色id数组
allRoles  存放获取到的所有角色列表,用于页面渲染
checkAll bool值,true代表当前选中全选,false代表没有
allRolesId  根据所有角色获取到的所有角色 id

4. 实现逻辑

为了提升用户体验,allRolesallRolesId 两个变量都是在页面渲染之前获得,即通过 created 函数实现

created() {
    this.fetchData() //刷新数据
    this.getAllRoles() 
},

通过调用后端提供的 getRoles()方法来获取到数据库中所有的角色集合,然后通过遍历该集合获取到所有角色的id数组

getAllRoles(){
  api_r.getRoles().then(response => {
    this.allRoles = response.data;
    //获取所有的id集合
    for(let i=0;i<this.allRoles.length;i++){
      this.allRolesId[i] = this.allRoles[i].id
    }
  })
},

接下来就是本篇文章的重头戏,全选功能实现
由于originalRoleList是通过 v-model 双向绑定,所以我们只需在点击全选按钮时更换当前originalRoleList中的值就好了

handleCheckAllChange(){
    //在每一次点击时通过三目运算符判断
  this.checkAll === false ? true : false

  if(this.checkAll)
    this.originalRoleList = this.allRolesId
  else
    this.originalRoleList = []  
},

解决完上述问题后,在调试中发现 在全选按钮选中的情况下,取消其他子选项并没有取消全选,所以此时我们应该在子按钮的 @change 事件中做相应的逻辑完善,即简单判断当前角色的idList是否于全选状态下的idList长度相等即可

handleCheckedChange() {
    //处理当全选亮起时 取消分选项而没有使全选取消选中的情况
  if(this.originalRoleList.length === this.allRoles.length)
    this.checkAll = true
  else
    this.checkAll = false  
},

以上就是简单的页面复选框中实现全选操作。而对于点击保存按钮以后与后端交互的逻辑这里就不细述,其实也就是把当前的originalRoleList传回去,后端通过比较新的idList和旧的idList,多的增,少的删🉑
鄙人技术还不够精湛,若有错误还请指正🙏!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值