vue+ElementUI中的多选框中的不确定状态

本文介绍如何在ElementUI中利用indeterminate和checkAll属性实现复选框组的不确定状态,详细解释了其工作原理及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用indeterminate与checkAll控制不确定状态

checkbox有三种状态全选(显示的'√'),选中部分(显示的'-'),全不选(啥都没显示)
对于indeterminate和v-model绑定的a和b的值
如果true true 或者 true false样式为-
如果false true样式为√
如果false false样式为不勾

示例为elementUI官网上的案例

<template>
  <div>
    <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>
  </div>
</template>
<script>
const cityOptions = ["上海", "北京", "广州", "深圳"];
export default {
  name: "checkbox",
  data() {
    return {
      checkAll: false,
      checkedCities: ["上海", "北京"],
      cities: cityOptions,
      isIndeterminate: true
    };
  },
  methods: {
    handleCheckAllChange(val) {
      //val值为布尔类型的值,若val为false则this.checkedCities为空,否则全部选中
      this.checkedCities = val ? cityOptions : [];
      //设置isIndeterminate,看model的布尔值,要么全选要么全不选
      this.isIndeterminate = false;
    },
    handleCheckedCitiesChange(value) {
      //获取修改过的cities的值的长度
      let checkedCount = value.length;
      //当修改后的长度=全部的长度则为true,否则为false
      this.checkAll = checkedCount === this.cities.length;
      //当修改后的长度不等于全部的长度时,isIndeterminate为false
      this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
    }
  }
};
</script>
### 实现 Vue 2 和 Element UI 中多选框的全选功能 为了实现在 Vue 2 和 Element UI 中多选框的全选功能,可以采用如下方法: #### HTML 结构与绑定事件 创建一个多选框用于控制全选操作,并将其状态变化通过 `@change` 绑定到处理函数上。 ```html <template> <div id="app"> <!-- 全选复选框 --> <label><input type="checkbox" @change="handleCheckAllChange"> 全选</label> <!-- 表格组件 --> <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> ``` #### JavaScript 方法定义 编写相应的逻辑来响应用户的交互行为。当用户点击全选框时,更新表格内所有行的选择状态;反之亦然——即当选中或取消某些特定项时调整全选框的状态。 ```javascript <script> export default { data() { return { checkAll: false, // 控制全选框初始未被选中的状态 tableData: [ { name: 'Tom', address: 'No.189, Grove St, Los Angeles' }, { name: 'John', address: 'No.176, Main St, New York' } ], multipleSelection: [] // 存储当前已选项的数据集合 }; }, methods: { handleCheckAllChange(val) { this.$refs.multipleTable.toggleAllSelection(); // 切换表单内的所有选择 this.checkAll = val; }, handleSelectionChange(selection) { this.multipleSelection = selection; const allSelected = this.tableData.length === this.multipleSelection.length; this.checkAll = allSelected ? true : false; if (this.multipleSelection.length > 0 && !allSelected){ document.getElementById("chooseall").indeterminate = true; // 设置不确定态 }else{ document.getElementById("chooseall").indeterminate = false; } } } }; </script> ``` 上述代码实现了基本的全选/反选功能以及保持两者之间的同步关系[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值