美文网首页
循环中使用ref绑定dom对象其中的坑

循环中使用ref绑定dom对象其中的坑

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-01-29 17:45 被阅读0次

view中
组件el-cascader中,我们的handleChange方法中操作了dom,注意这里绑定的ref节点一定是动态的,否则this.$refs['cascader']选中的永远都是第一行的el-cascader的dom

动态节点我们可以利用索引区分

:ref="`cascader${$index}`"
<el-form :model="form" ref="form">
        <el-table :data="form.list" border stripe>
          <el-table-column
            show-overflow-tooltip
            header-align="center"
            align="center"
            label="所属单位/部门"
          >
            <template slot-scope="{ row, $index }">
              <el-form-item
                :prop="`list.${$index}.staffDeptId`"
                :rules="dataRule.staffDeptId"
              >
                <el-cascader
                  filterable
                  :ref="`cascader${$index}`"
                  v-model="row.staffDeptId"
                  :options="assetOptions"
                  @change="(e) => handleChange(e, $index)"
                  :show-all-levels="false"
                  :props="{
                    expandTrigger: 'hover',
                    emitPath: false,
                    value: 'id',
                    label: 'name',
                    checkStrictly: true,
                  }"
                  placeholder="请选择所属单位/部门"
                ></el-cascader>
              </el-form-item>
            </template>
          </el-table-column>
        </el-table>
    </el-form>

数据源中

     form: {
        list: [{ staffDeptId: "" }],
      },

method中

handleChange(e, index) {
      this.$nextTick(() => {
        // 这里我们获取dom元素的时候,ref绑定的结构是cascader + index的组合
        // 目的就是点击不同行的时候,保证每一行的级联组件元素的唯一性
        let [node] = this.$refs[`cascader${index}`].getCheckedNodes();
        this.form.people[index].deptName = node.label;
      });
    },

相关文章

网友评论

      本文标题:循环中使用ref绑定dom对象其中的坑

      本文链接:https://www.haomeiwen.com/subject/yaephdtx.html