Vue动态生成el-checkbox点击无法赋值的解决方法


Posted in Javascript onFebruary 21, 2019

前言

最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-model 绑定的数据也是动态生成的

例如:

定义的 data 的 form 里面是空对象,需要动态生成里面的 key

export default {
 data() {
 return {
  form: {}
 }
 },
}

从后端接口得到 checkList,这个就是动态生成的表单数据

v-for 循环 checkList,得到 key,然后直接 v-model=“form.key” 动态生成 form 里面的 key

<el-form-item :label="item1.name+`:`" v-for="item1 in checkList" :key="item1.id">
 <el-checkbox-group v-model="form[`${item1.code}`]">
 <el-checkbox
  :label="item2.id"
  v-for="item2 in item1.values"
  :key="item2.id">
  {{ item2.value }}
 </el-checkbox>
 </el-checkbox-group>
</el-form-item>

问题来了

当页面点击动态生成的 CheckBox 方框,会出现全选的情况,查看 vue 数据,显示如下:

Vue动态生成el-checkbox点击无法赋值的解决方法

绑定的数据居然是 Boolean 类型,怪不得会出现要么全部勾选,要不全部不选

正常的情况 CheckBox 的绑定数据类型是数组形式

假设我在动态生成的时候,就它置为数组格式:

this.checkList.forEach(item => {
 let key = item.code
 this.form[key] = []
})

但发现还是没用,会发现点击任何 CheckBox 都无法勾选

解决

这是 vue 的深入响应式原理,官方说法和解决方法:

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)

然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上

现在明白了,可以使用 Vue.set 方法解决这个深入式响应原理

this.checkList.forEach(item => {
 let key = item.code
 this.$set(this.form, key, [])
})

完美解决~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 开发中规范性的一点感想
Jun 23 Javascript
jquery multiSelect 多选下拉框
Jul 09 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
moment.js轻松实现获取当前日期是当年的第几周
Feb 05 Javascript
js实现背景图片感应鼠标变化的方法
Feb 28 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
Listloading.js移动端上拉下拉刷新组件
Aug 04 Javascript
extjs简介_动力节点Java学院整理
Jul 17 Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
Aug 07 Javascript
VuePress 快速踩坑小结
Feb 14 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 #Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 #Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 #Javascript
Vue实现table上下移动功能示例
Feb 21 #Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 #Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 #Javascript
ES6基础之展开语法(Spread syntax)
Feb 21 #Javascript
You might like
PHP新手上路(七)
2006/10/09 PHP
php socket方式提交的post详解
2008/07/19 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
javascript制作2048游戏
2015/03/30 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python中bisect的用法
2014/09/23 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python装饰器用法实例总结
2018/05/26 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
《神奇的克隆》教学反思
2014/04/10 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
大学生村官个人总结
2015/02/15 职场文书
举起手来观后感
2015/06/09 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
医学会议开幕词
2016/03/03 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
Django Paginator分页器的使用示例
2021/06/23 Python