• 解决 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

  • 相关阅读:
    Vim基本功
    八个最常用的正则表达式
    程序员总结:帮助你早些明白一些道理
    HttpClient
    Red.Hat.Enterprise.Linux.6.2下安装vim 、OpenOffice、JDK、Eclipse
    输出打印某个对象所有属性及属性值
    Notepad++
    写博客?
    解决操作WordPress时提示输入FTP信息
    JS通过键盘点击事件实现div移动
  • 原文地址:https://www.cnblogs.com/ainyi/p/10409942.html
Copyright © 2020-2023  润新知