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 22 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
官方推荐react-navigation的具体使用详解
May 08 Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 Javascript
详解如何运行vue项目
Apr 15 Javascript
13 个npm 快速开发技巧(推荐)
Jul 04 Javascript
js实现倒计时秒杀效果
Mar 25 Javascript
Vue发布订阅模式实现过程图解
Apr 30 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
Js+XML 操作
2006/09/20 Javascript
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
自我评价200字分享
2013/12/17 职场文书
工作失职检讨书范文
2014/01/16 职场文书
年度考核自我鉴定
2014/02/02 职场文书
科级干部考察材料
2014/02/15 职场文书
实习单位鉴定评语
2014/04/26 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
关于童年的读书笔记
2015/06/26 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL