Vue动态生成el-checkbox点击无法赋值的解决方法
前言
最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 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 数据,显示如下:
绑定的数据居然是 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, []) })
完美解决~
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
利用Vue.js实现checkbox的全选反选效果
前言 这篇文章主要是跟大家分享了利用Vue.js实现checkbox的全选反选效果,之前写的代码存在一个bug,就是当你选择全选的时候去掉后面的一个选项,再点全选结果就是反的了.后来很感谢朋友留言帮我改了这个问题嘻嘻,下面一起来看看具体是怎么实现的吧. html示例代码 <template> <div> <input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll'
-
checkbox在vue中的用法小结
前言 关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样,之前对于vue中用到过的checkbox也只是别人写好的组件,这次在自己实现时走了很多坑,特意写这篇文章记录下来,给后来者提供一个参考 在这之前,先看看原生checkbox搭配jquery取值的用法 <input type="checkbox" name="hobby" v
-
vue .js绑定checkbox并获取、改变选中状态的实例
如下所示: 1.html <div class="weui-cells weui-cells_checkbox font14" v-for="item in items"> <label class="weui-cell weui-check__label"> <div class="weui-cell__ft width-inherit"> <input type="che
-
使用vue.js实现checkbox的全选和多个的删除功能
template代码: <template> <div class="hello"> <ul> <li v-for="(item, index) in proData"> <label for=""> <input type="checkbox" :value="index" v-model="selectArr">
-
vue基于element-ui的三级CheckBox复选框功能的实现代码
最近vue项目需要用到三级CheckBox复选框,需要实现全选反选不确定三种状态.但是element-ui table只支持多选行,并不能支持三级及以上的多选,下面通过本文给大家讲解实现方法. 效果图预览: 首先是页面布局,当然也可已使用table,但是自己用flex布局后面更容易增删改查其他功能 <div class="deliverySetting-table"> <div class="table-head"> <div clas
-
vue checkbox 全选 数据的绑定及获取和计算方法
html <input type='checkbox' v-model='checkboxModel' :value='z.coach_id+"-"+z.amount' :i="dianji" @click="lll"> 第一个CheckBox <span><input type='checkbox' v-model='checked' v-on:click='checkedAll'><span clas
-
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="text" v-model="msg"><br> {{msg}} </div> js里data初始化数据 <script src="./js/vue.js"></script> <script
-
Vue自定义指令实现checkbox全选功能的方法
最近做的一个项目需要用到Vue实现全选功能,参考了一下网上的做法,发现用属性计算的复用性不高,于是选用自定义指令,但网上的做法大多是会对原始数据有一定的格式要求,而且没有返回结果,于是做了改进. 上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id
-
关于动态生成dom绑定事件失效的原因及解决方法
之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下: 1. 事件失效的原因: (1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了 (2)同样,当你使用var aa = document.getElementsByTagName("动态生成的元素");来获取动态生成的元素的时候也是获取
-
Vue动态生成el-checkbox点击无法赋值的解决方法
前言 最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-model 绑定的数据也是动态生成的 例如: 定义的 data 的 form 里面是空对象,需要动态生成里面的 key export default { data() { return { form: {} } }, } 从后端接口得到 checkList,这个就是动态生成的表单数据 v-for 循环 checkList,得到 key,然后直接 v
-
使用Vue动态生成form表单的实例代码
具有数据收集.校验和提交功能的表单生成器,包含复选框.单选框.输入框.下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展. 欢迎大家star学习交流:github地址 示例 https://raw.githubusercontent.com/xaboy/form-create/dev/images/sample110.jpg 安装 npm install form-create OR git clone https://github.com/xa
-
VUE动态生成word的实现
不废话,直接上代码. 前端代码: <template> <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="110"> <FormItem label="项目(全称):" prop="orgName"> <Input v-model=
-
vue 动态生成拓扑图的示例
横向拓扑 在 index.html 文件中引入文件. <link href="https://magicbox.bk.tencent.com/static_api/v3/assets/bootstrap-3.3.4/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet"> <link href="https://magicbox.bk.tencen
-
Vue 动态生成数据字段的实例
目录 动态生成数据字段实例 1.父组件定义data里面的数据字段 2.子组件接收数据 3.因为获取数据是异步操作 4.计算属性计算两个变量是否均完成 5.子组件完整代码 表单动态生成字段 动态生成数据字段实例 1.父组件定义data里面的数据字段 异步请求获取数据(一种配置数据,一种实际数据) data () { return { config: [], list: [] }; } 2.子组件接收数据 props: { config: Array, list: A
-
vue动态删除从数据库倒入列表的某一条方法
如下所示: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> //导入vue.js <script type="text/javascript" src="./vue.js"></script> //非常简单了设置了一下css样式 <style type=&q
-
js 动态生成json对象、时时更新json对象的方法
函数不需要 return,因为 json 对象会被函数直接修改. var str1 = {"name": "apple", "sex": "21"}; // 参数:prop = 属性,val = 值 function createJson(prop, val) { // 如果 val 被忽略 if(typeof val === "undefined") { // 删除属性 delete str1[prop]
-
vue中@click绑定事件点击不生效的解决
目录 @click绑定事件点击不生效 原因 解决方法 @click中不能使用三则表达式原因 @click绑定事件点击不生效 原因 根据Vue2.0官方文档关于父子组件通讯的原则,父组件通过prop传递数据给子组件,子组件触发事件给父组件.但父组件想在子组件上监听自己的click的话,需要加上native修饰符. 解决方法 方法1:在@click后加上.native(监听根元素的原生事件,使用 .native 修饰符) @click.native = "..." 方法2:向外发送clic
-
在layui中layer弹出层点击事件无效的解决方法
1.click只能为页面现有的元素绑定点击事件,如果是动态生成的新的元素,是没有事 件的 2.而(document).on("click","指定的元素",function()); 方法则是将指定的事件绑定在document上,而新产生的元素如果符合指定的元素,那就触发此事件不起作用:(document).on("click","指定的元素",function()); 方法则是将指定的事件绑定在document上,而新产生的元
随机推荐
- MyBatis中的模糊查询语句
- vbs 解析json jsonp的方法
- C# 小数位数保留的方法集锦
- Mybatis批量删除数据操作方法
- js判断文件格式及大小的简单实例(必看)
- asp.net ListView交替背景颜色实现代码
- 重新封装zend_soap实现http连接安全认证的php代码
- 一个自动居中的导航条实例与相关问题 DIV+CSS
- 惊现瑞星升级原理详解,其实早就有人破解了
- BootStrap轮播HTML代码(推荐)
- PowerShell中获取Windows系统序列号的脚本分享
- Android异步回调中的UI同步性问题分析
- 利用JDBC的PrepareStatement打印真实SQL的方法详解
- win2003禁止web等目录执行exe,bat,com的方法
- C#的编码规范详细说明
- JS+canvas画一个圆锥实例代码
- 快速卸载易语言步骤
- Hadoop框架起步之图解SSH、免密登录原理和实现方法
- python中的colorlog库详解
- Yii框架日志操作图文与实例详解