最近在做一个循环渲染多行多选框的页面,使用可element ui  的 checkdebox 组件。一维数组循环的是每一个多选框组,二维循环的是每个多选框组的选项。

<el-row v-for="(item,index) in settingData" :key="index">
      <el-col :span="4">
        <span >{{item.typeName}}:</span>
      </el-col>
      <el-col :span="20">
        <el-checkbox-group v-model="item.selectList">
          <el-checkbox v-for="(optionItem,optionIndex) in item.list"
                       :label="Number(optionItem.value)"
                       :key="optionIndex"
                       :disabled="index===0">{{optionItem.key}}</el-checkbox>
        </el-checkbox-group>
      </el-col>
    </el-row>

settingData =[
{list: [{key: "计划完成率", value: "1"}], typeName: "计划状态",typeValue: 0},
 {list: [{key: "未处理", value: "1"}, {key: "初筛不合格", value: "2"}, {key: "初筛通过",value: "3"}],typeName: "简历初筛"typeValue: 1]

最后的结果是点击多选框没有显示选中转态,打印 item.selectList 却是有选中数据。然后怀疑是vue监听不到数据变化,没有刷新页面。item.selectList  是之前没有定义的,是在这里新加的一个存储多选框选中内容的属性。 

折腾了好久,以为是二维数组监听不到的问题,后来发现是:

在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。

根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新

item.selectList 是在实例创建之后添加的,vue 监听不到,必需在实例创建之前添加才可以被监听到。

参考:https://www.jianshu.com/p/71b1807b1815  这是简书上大佬写的,写的很明白。

Logo

前往低代码交流专区

更多推荐