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 相关文章推荐
event.keyCode键码值表 附只能输入特定的字符串代码
May 15 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
js方法数据验证的简单实例
Sep 17 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
JavaScript实现选中文字提示新浪微博分享效果
Jun 15 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 Javascript
Vue左滑组件slider使用详解
Aug 21 Javascript
Vue+Element-U实现分页显示效果
Nov 15 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python多进程写入同一文件的方法
2019/01/14 Python
详解python播放音频的三种方法
2019/09/23 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
行政办公员自我评价分享
2013/12/14 职场文书
高中的自我鉴定
2013/12/16 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
2015年三万活动总结
2015/03/25 职场文书
员工辞职信范文大全
2015/05/12 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫