ElementUI的el-checkbox的自定义使用

样式效果:

html代码部分:
<el-checkbox v-model="CheckAll" label="全选" @change="handleCheckAllChangeSales"></el-checkbox>
    <el-checkbox-group v-model="Select" class="yetaixuan" @change="handleCheckedCitiesChange">
      <!-- el-checkbox 的label 是绑定值 基础用法 -->
      <el-checkbox v-for="(item, index) in tableData" :key="index" :label="item.val"></el-checkbox>

      <!-- 如果想获取到 选中的对象  {{item.val}} 为展示的选项 -->
      <!-- <el-checkbox v-for="(item, index) in tableData" :key="index" :label="item">{{item.val}}</el-checkbox> -->

</el-checkbox-group>

js部分:
<script>
export default {
  data() {
    return {
      CheckAll: false,// 全选框是否是勾选状态
      Select: [], //选中的数据
      // 多选框选项
      tableData: [
        { val: "多选框 一", id: 1 },
        { val: "多选框 二", id: 2 },
        { val: "多选框 三", id: 3 },
      ],
    };
  },
  methods: {
    //选择全选触发的事件 
    handleCheckAllChangeSales(bool) {
      // 如果是选中状态  bool为true  并把所有选项赋值给Arr
      // 如果是未选中状态 bool为false  把Arr赋值为空
      let Arr = bool ? this.tableData : [];
      // 如果Arr长度大于0
      if (Arr.length > 0) {
        // 把其他的选项赋值
        Arr.forEach((item) => {
          this.Select.push(item.val);
        });
        // 如果Arr长度小于等于0 把选项清空
      } else {
        this.Select = [];
      }
    },
    // 多选框绑定值改变时触发
    handleCheckedCitiesChange(value) {
      // value 为多选框选中的值 是一个数组
      let Selectlength = value.length;
      // 如果选择的值的数组长度 等于 选项数组的长度 全选框勾选状态为true
      this.CheckAll = Selectlength === this.tableData.length;
    },
  },
  watch: {
    // 侦听选中的值
    Select(newValue, oldValue) {
      console.log(newValue, '多选框选中选项');
    },
  },
};
</script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-elementui 的穿梭框(transfer)组件中,可以通过 `filterable` 属性来开启搜索功能,但是默认情况下是单选模式,无法进行多选。如果需要实现多选功能,可以通过自定义模板来实现。 具体步骤如下: 1. 在 `el-transfer` 组件中,设置 `left-default-checked` 和 `right-default-checked` 属性为 `false`,禁用默认选中状态。 2. 使用 `scoped-slot` 自定义左右两侧的模板,可以参考以下代码: ```html <template slot="left-footer"> <el-checkbox-group v-model="leftChecked"> <el-checkbox label="all" @change="handleLeftCheckAllChange">Check all</el-checkbox> </el-checkbox-group> </template> <template slot="right-footer"> <el-checkbox-group v-model="rightChecked"> <el-checkbox label="all" @change="handleRightCheckAllChange">Check all</el-checkbox> </el-checkbox-group> </template> <template slot="left-item" slot-scope="{ option }"> <el-checkbox :label="option.key" v-model="leftChecked" :disabled="option.disabled">{{ option.label }}</el-checkbox> </template> <template slot="right-item" slot-scope="{ option }"> <el-checkbox :label="option.key" v-model="rightChecked" :disabled="option.disabled">{{ option.label }}</el-checkbox> </template> ``` 3. 在 `data` 中定义 `leftChecked` 和 `rightChecked` 数组,以及 `handleLeftCheckAllChange` 和 `handleRightCheckAllChange` 方法,用于实现全选/全不选的功能。 4. 在 `methods` 中定义 `filterMethod` 方法,用于实现搜索功能的自定义过滤方法。 5. 在 `el-transfer` 组件中,设置 `:filter-method="filterMethod"`,启用自定义过滤方法。 完整代码如下所示: ```html <template> <div> <el-transfer :data="data" :filterable="true" :filter-method="filterMethod" :left-default-checked="false" :right-default-checked="false"> <template slot="left-footer"> <el-checkbox-group v-model="leftChecked"> <el-checkbox label="all" @change="handleLeftCheckAllChange">Check all</el-checkbox> </el-checkbox-group> </template> <template slot="right-footer"> <el-checkbox-group v-model="rightChecked"> <el-checkbox label="all" @change="handleRightCheckAllChange">Check all</el-checkbox> </el-checkbox-group> </template> <template slot="left-item" slot-scope="{ option }"> <el-checkbox :label="option.key" v-model="leftChecked" :disabled="option.disabled">{{ option.label }}</el-checkbox> </template> <template slot="right-item" slot-scope="{ option }"> <el-checkbox :label="option.key" v-model="rightChecked" :disabled="option.disabled">{{ option.label }}</el-checkbox> </template> </el-transfer> </div> </template> <script> export default { data() { return { data: [ { key: '1', label: 'Option 1', disabled: false }, { key: '2', label: 'Option 2', disabled: false }, { key: '3', label: 'Option 3', disabled: false }, { key: '4', label: 'Option 4', disabled: false }, { key: '5', label: 'Option 5', disabled: false }, { key: '6', label: 'Option 6', disabled: false }, { key: '7', label: 'Option 7', disabled: false }, { key: '8', label: 'Option 8', disabled: false }, { key: '9', label: 'Option 9', disabled: false }, { key: '10', label: 'Option 10', disabled: false } ], leftChecked: [], rightChecked: [] }; }, methods: { filterMethod(query, option) { return option.label.indexOf(query) > -1; }, handleLeftCheckAllChange(checked) { if (checked) { this.leftChecked = this.data.map(item => item.key); } else { this.leftChecked = []; } }, handleRightCheckAllChange(checked) { if (checked) { this.rightChecked = this.data.map(item => item.key); } else { this.rightChecked = []; } } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值