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 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
js 自定义的联动下拉框
Feb 07 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
浅析JS中什么是自定义react数据验证组件
Oct 19 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 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 md5下16位和32位的实现代码
2008/04/09 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Vue程序调试的方法
2019/06/17 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
详解在Python程序中使用Cookie的教程
2015/04/30 Python
python实现的系统实用log类实例
2015/06/30 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python多线程之事件Event的使用详解
2018/04/27 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
Python sorted对list和dict排序
2020/06/09 Python
python 下载文件的几种方法汇总
2021/01/06 Python
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
建筑设计师岗位职责
2013/11/18 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
双方协议书
2014/04/22 职场文书
开工典礼策划方案
2014/05/23 职场文书
建设工程授权委托书
2014/09/22 职场文书
停电通知范文
2015/04/16 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP