三层v-for嵌套的数据传递问题,动态获取不行

1,615 阅读1分钟

看一下这段代码

 <el-collapse
                v-model="item.powerDeviceName"
                @change="activeNames_two"
                v-for="(item, index1) in taskStep2Data"
                :key="item.powerDeviceId"
              >
                <div v-for="(item2, index) in item.monitorDeviceInfos" :key="item2.monitorDeviceId">
                  <el-collapse-item
                    v-show="item2.monitorDeviceId != 3"
                    :title="item2.monitorDeviceName"
                    :name="item2.monitorDeivceId"
                  >
                    <el-checkbox-group
                      v-model="typeIdDataChecked_two[index1][index]"
                      @change="handleCheckedCitiesChange_two"
                    >
                      <el-checkbox
                        style="display: block; text-align: left;height: 39px;line-height:39px;"
                        class="ckeckbox_style"
                        v-for="item3 in item2.recognitionTypes"
                        :title="item3"
                        :name="item2.monitorDeviceId"
                        :label="item3+'a'+item2.monitorDeviceId+'a'+item.powerDeviceId+'a'+item2.monitorDeviceType"
                        :key="item3"
                      >{{item3 | transformDevice}}</el-checkbox>
                    </el-checkbox-group>
                  </el-collapse-item>
                </div>
              </el-collapse>

这段代码实现的是渲染出一个类似这样的结构

点击第三层结构的表计可以实现获取到最外一层的id值,上一层的id,和自身的id,并将数据整合发送给后台

$nbsp;最开始我使用的是vue中的ref来获取对应结构的dom达到获取id的作用, 可是发现,因为v-for的缘故,每一个组件都获取到了相同的name, 所以导致ref也无法达到最终的效果。 冥思苦想一下午,直到第二天早上来上班灵光一现。

将id值在渲染阶段就绑定到最里层的checkbox上,通过@change获取到对应的label值,这样不就解决了,动态获取的难题,一步到位

然后还有另一个问题,那就是el-checkbox-group 中的v-model绑定问题,开始就是点击一个checkbox,另一个el-collapse-item下的checkbox也被选中,原因就是绑定了同一个值,并且这个值不是一个数组,绞尽脑汁,在大神的帮助下使用了二维数组才解决。

// 第一次码文,还不太熟悉,各位看官见笑