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 相关文章推荐
在线游戏大家来找茬II
Sep 30 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
js实现宇宙星空背景效果的方法
Mar 03 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
浅谈Vue父子组件和非父子组件传值问题
Aug 22 Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 Javascript
详解mpvue scroll-view自动回弹bug解决方案
Oct 01 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
vue中destroyed方法的使用说明
Jul 21 Javascript
JavaScript中的Proxy对象
Nov 27 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中计算字符串相似度的函数代码
2012/12/29 PHP
php分页示例分享
2014/04/30 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
微信小程序多张图片上传功能
2017/06/07 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python 字符串换行的多种方式
2018/09/06 Python
python解释器安装教程的方法步骤
2020/07/02 Python
python pymysql库的常用操作
2020/10/16 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
中学生获奖感言
2014/02/04 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
公司请假条格式
2014/04/11 职场文书
还款承诺书范文
2014/05/20 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
小学见习报告
2015/06/23 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS