zoukankan      html  css  js  c++  java
  • 解决 Vue 动态生成 el-checkbox 点击无法赋值问题

    博客地址:https://ainyi.com/68

    最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 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 数据,显示如下:

    正常的情况 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, [])
    })
    

    完美解决~

    博客地址:https://ainyi.com/68

  • 相关阅读:
    Python爬虫爬取网页图片
    Python爬虫爬取贴吧的帖子内容
    Android导入AS工程
    Arcgis for Silverlight学习(一)
    Silverlight学习笔记之页面跳转
    视频信号的垂直消隐和水平消隐[转]
    【DM642学习笔记八】色度重采样
    java从入门到卖肠粉系列
    [Selenium] Automation Test Manual(Selenium)
    [Selenium] Selenium私房菜(新手入门教程)
  • 原文地址:https://www.cnblogs.com/ainyi/p/10409942.html
Copyright © 2011-2022 走看看