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事件冒泡传递(cancelBubble 、stopPropagation)
May 08 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
Sep 02 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
Dec 31 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
详解ES6系列之私有变量的实现
Nov 21 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
php获取服务器信息的实现代码
2013/02/04 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
Django--权限Permissions的例子
2019/08/28 Python
python列表推导式操作解析
2019/11/26 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
《与象共舞》教学反思
2014/02/24 职场文书
调解协议书
2014/04/16 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python