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 对象的创建与使用
Mar 09 Javascript
jquery 学习之二 属性(类)
Nov 25 Javascript
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
异步动态加载js与css文件的js代码
Sep 15 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
基于jquery编写的放大镜插件
Mar 23 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
JS控制层作圆周运动的方法
Jun 20 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
PHP程序员不应该忽略的3点
2015/10/09 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
微信小程序日期选择器实例代码
2018/07/18 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
积极分子思想汇报
2014/01/04 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
创业计划书之农家乐
2019/10/09 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android