Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 二次封装

  • 实践踩坑

    • Icon图标

    • Table表格

    • Checkbox多选框

      • 全选操作分析
        • 一. 官网实例
        • 二. 回炉重造
    • Message消息提示

    • Dialog对话框

    • Input输入框

    • Tree树形控件

  • 《Element-UI 实践系列》笔记
  • 实践踩坑
  • Checkbox多选框
Jamey
2021-09-10
目录

全选操作分析

# 全选操作分析

# 一. 官网实例

<template>
  <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">
  全选
  </el-checkbox>
  
  <div style="margin: 15px 0;"></div>
  
  <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
    <el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
  </el-checkbox-group>
</template>
1
2
3
4
5
6
7
8
9
10
11
<script>
  export default {
    data(){
      return {
        checkAll: false, // 全选
        cities: [
          {
            "name":"高一",
            "value":"928"
          },
          {
            "name":"高二",
            "value":"929"
          },
          {
            "name":"高三",
            "value":"930"
          }
        ], // 数据源
        checkedCities:[], // 绑定默认选中
        isIndeterminate:false, // 设置 indeterminate 状态,只负责样式控制
      }
  
      methods:{
        // 全选 --- 当绑定值变化时触发的事件
        handleCheckAllChange(val) {
          console.log(val) // val的值是一个布尔值,点中全选为false,取消全选为true
          this.cities.forEach(item=>{ // 当全选被选中的时候,循环遍历源数据,把数据的每一项加入到默认选中的数组去
            this.checkedCities.push(item.name)
          })  
          this.checkedCities = val ? this.checkedCities : []; // 三元表达式,如果val的值为true,那么就把当前默认选中的值赋值给自身,这样页面页面上所有的元素就都选中了。如果为false,就是取消全选
          this.isIndeterminate = false;  // 官网说这是个样式控制,是来控制,什么时候半选的,要不要都无所谓,看你需求
        },
          
        // checkbox选中 --- 当绑定值变化时触发的事件
        handleCheckedCitiesChange(value) {
          let checkedCount = value.length;   //选中值的长度
          this.checkAll = checkedCount === this.cities.length;  // 如果选中值的长度和源数据的长度一样,返回true,就表示你已经选中了全部checkbox,那么就把true赋值给this.checkAll
          this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length; // 同全选按钮事件里面的那个样式控制
        }
     }
   }
  };
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

提示

有两个属性来控制全选这个checkbox:indeterminate和checkAll。
indeterminate 为 false,checkAll 为 false 的时候,状态为 未选中。
indeterminate 为 true, checkAll 为 false 的时候,状态为 半选中。
indeterminate 为 false,checkAll 为 true 的时候,状态为 全选中。
把全选框状态改为未选中状态,应该修改indeterminate和checkAll,均为false。

# 二. 回炉重造

感觉api里面写的太麻烦了,不易懂,自己写了一个,如下:

<el-checkbox v-model="checkAll" @change="handleCheckAllChange">
  全选
</el-checkbox>

<el-checkbox v-for="(city,i) in cities" :label="city.name" :key="i" v-model="checkedCities" @change="handleCheckedCitiesChange">
  {{city.name}}
</el-checkbox>
1
2
3
4
5
6
7
<script>
  export default {
    data(){
      return {
        checkAll: false, // 全选
        cities: [
          {
            "name":"高一",
            "value":"928"
          },
          {
            "name":"高二",
            "value":"929"
          },
          {
            "name":"高三",
            "value":"930"
          }
        ], // 数据源
        checkedCities:[], // 绑定默认选中
        isIndeterminate:false, // 设置 indeterminate 状态,只负责样式控制
      },
      
      methods:{
        // 全选 --- 当绑定值变化时触发的事件
        handleCheckAllChange(val) {
          if(this.checkAll){
            this.cities.forEach(item=>{ // 当全选被选中的时候,循环遍历源数据,把数据的每一项加入到默认选中的数组去
              this.checkedCities.push(item.name)
            })
          }else {
            this.checkedCities = []
          }
    
        },  
    
        // checkbox选中 --- 当绑定值变化时触发的事件
        handleCheckedCitiesChange(value) {
          console.log(this.checkedCities);
          if(this.checkedCities.length == this.cities.length){ // 如果选中值的长度和源数据的长度一样,返回true,就表示你已经选中了全部checkbox,那么就把true赋值给this.checkAll
            this.checkAll=true
          }else{
            this.checkAll=false
          }
        }
      }
   }
  };
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#Element
上次更新: 2022/07/08, 17:40:08
多列组合排序
消息提示组件

← 多列组合排序 消息提示组件→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式