elementui复选框组使用与遇到的问题

14 篇文章 0 订阅
5 篇文章 0 订阅

今天有个弹出窗编辑的时候elementui的复选框出了问题,控制台也没有报错,但就是死活选不中,解决后决定写一遍文章描述一下复选框的用法,以及这个问题是怎么导致的。

1、复选框组使用

// deviceDialogFormData.config默认为['0']
<el-checkbox-group v-model="deviceDialogFormData.config" @change="handleCheckedChange">
	<el-checkbox :label="'0'" disabled>小明</el-checkbox>
	<el-checkbox :label="'1'">小红</el-checkbox>
	<el-checkbox :label="'2'">小张</el-checkbox>
</el-checkbox-group>

复选框值改变事件的方法

// value复选框组的选中值组成的数组
handleCheckedChange(value) {
  let checkedCount = value.length;
}

2、默认值的设置

复选框组的选中值以数组形式返回,所以默认值也必须设置为数组。

deviceDialogFormData.config = ['0']

3、遇到的问题

新增与编辑用的是同一个组件,但是新增的复选框组没有问题,编辑时复选框组却点了没反应。
随后在handleCheckedChange方法中打印,点击“小红”,发现数组选中值也没有改变,但是仍然出发了事件,这就很奇怪了。
在这里插入图片描述

// value复选框组的选中值组成的数组
handleCheckedChange(value) {
	console.log(value); // 点击选中小红打印选中的值结果依然为['1'],正常情况下应该为['1','2']
  let checkedCount = value.length;
}

随后检查代码,发现是在传值时对象写法问题。因为使用的表单,所以是进行了表单数据绑定的,deviceDialogFormData对象绑定了表单,deviceDialogFormData.config则对应选中的复选框数据,但是因为在编辑时赋值写法问题,所以导致无法正常操作。

复选框组所在的表单行的html标签代码:

            <el-form-item label="设备配置" prop="config" style="text-align: left;">
              <el-checkbox
              :indeterminate="isIndeterminate"
              v-model="checkAll"
              @change="handleCheckAllChange">全选</el-checkbox>
              <el-checkbox-group v-model="deviceDialogFormData.config" @change="handleCheckedChange">
                <el-checkbox :label="'0'" disabled>小明</el-checkbox>
                <el-checkbox :label="'1'">小红</el-checkbox>
                <el-checkbox :label="'2'">小张</el-checkbox>
              </el-checkbox-group>
            </el-form-item>

3.1、导致问题的写法

赋值创建对象字面量对象之后再给config赋值。

this.deviceDialogFormData = {
	// 其它属性值的赋值略
}
this.deviceDialogFormData.config = data.config.split(",");

3.2、正常可以使用的写法

赋值创建对象字面量对象时时就将config写进去。

this.deviceDialogFormData = {
	// 其它属性值的赋值略
  config: data.config.split(",")
}

4、事件冒泡的问题

elementui的复选框如果需要阻止事件冒泡,最好在外卖加一层div,把事件绑定到该div上。

<div class="tim" id="tim" v-for="(fileName, index) in nowPhotoArr" :key="fileName" @click.stop="openPhotoDetails(fileName, index)">
          <div class="checkbox"  v-on:click.stop="">
            <el-checkbox :label="fileName"></el-checkbox>
          </div>
          <img class="img" :src="playPath + fileName">
          <p class="name">{{fileName}}</p>
        </div>

详细情况参考这篇文章
https://blog.csdn.net/weixin_44849078/article/details/89406583

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值