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 相关文章推荐
jquery UI 1.72 之datepicker
Dec 29 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
无阻塞加载脚本分析[全]
Jan 20 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
JavaScript中用toString()方法返回时间为字符串
Jun 12 Javascript
详解JavaScript树结构
Jan 09 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
express默认日志组件morgan的方法
Apr 05 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
Aug 09 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 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网站备份程序代码分享
2011/06/10 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
python中wx模块的具体使用方法
2020/05/15 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
幼儿园教学随笔感言
2014/02/23 职场文书
个人委托书怎么写
2014/04/04 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL