zoukankan      html  css  js  c++  java
  • vue 动态生成 el-checkbox-group 遇到的v-model绑定问题及解决方法

    在制作一个根据props传入值来动态生成未知个数的el-checkbox-group时:

    <template>
      <div >
        <el-checkbox-group v-for="(items,key) in queryData" v-model="checked[key]" @change="handleChange">
          <el-checkbox v-for="item in items" :label="item.value">{{item.name}}</el-checkbox>
        </el-checkbox-group>
      </div>
    </template>
    
    <script>
      export default {
        name: 'MySearch',
        data() {
          return {
            checked: {}
          }
        },
        props: {
          queryData: {
            type: Object,
            required: true
          }
        },
        methods: {
          handleChange() {
            this.$emit('change', this.checked)
          }
        }
      }
    </script>
    

      遇到一个问题,element-ui的el-checkbox-group需要绑定一个Array数组,但this.checked中的值是根据props传入值动态生成的。

      起初我的想法是在created中,动态为this.checked设一个[],使其初始化为数组:

    created() {
          for (let key in this.queryData) {
            this.checked[key]=[]
          }
        }
    

      然而这并不起作用,百度了n久,才发现是自己对vue的理解还不够深

      官网的深入响应式原理已经说明了这类问题的原因,并提供了解决方法:

      Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上

      于是我更改了我的代码,果然成功绑定了

    created() {
          for (let key in this.queryData) {
            this.$set(this.checked, key, [])
          }
        }
    

      这次问题充分表明了熟读文档的重要性,希望以后能改掉文档只看实用部分的坏毛病。

  • 相关阅读:
    mongoDB
    邮箱认证
    Django中开启事务的两种方式
    总结
    __new__和__init__和__call__方法理解
    jupyter
    text()和html()区别
    django模型中auto_now和auto_now_add的区别
    ajax嵌套陷阱
    模板内置函数(HTML)
  • 原文地址:https://www.cnblogs.com/w2xh/p/8260752.html
Copyright © 2011-2022 走看看