el-table渲染踩坑

前言:

本人前端不是特别熟,今天在弄一个弹窗表格功能时,发现只要点开某一行数据的弹窗再关闭,再点击其他弹窗时,发现最大数量都会以第一次为准,不是以当前数据行的为准。

问题:

①点开第三行弹窗显示,最大需求数量为5000
在这里插入图片描述
②接着点开第二行的数据,看着没啥问题
在这里插入图片描述
但是手动在30000后面再输多几个0会发现变成了5000,但是我弹框中的最大值还是30000,怎么就变成了5000呢
在这里插入图片描述

弹窗部分代码:

<el-dialog title="明细" :visible.sync="dialogVisible" width="1200px" append-to-body>
      <el-table ref="tableRef" :data="tableData" fit highlight-current-row :header-cell-style="headerCellStyle" max-height="350">
        <el-table-column
          label="需求数量"
          prop="quantity"
          align="center"
          min-width="130px"
          :render-header="addRedStar"
          show-overflow-tooltip
          fixed="left"
        >
          <template #default="{ row }">
            <el-input
              v-model="row.quantity"
              v-only-number="{ precision: 2, max: row.maxQuantity }"
              type="number"
              :disabled="!isEdit"
              :class="{ 'negative-number-color': formInfo.orderMode === 'Z010' }"
            />
            {{ row.maxQuantity }},{{ row.quantity }}
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button v-if="isEdit" type="primary" @click="saveList">确 定</el-button>
      </span>
    </el-dialog>

解决:

搞了一上午,可算在网上翻到了解决方案,需要在el-table中加一个唯一key来解决这个渲染问题,这个key是vue自带属性,主要用在 Vue 的虚拟 DOM比对算法中,在新旧nodes对比时辨识 VNodes。如果不更新这个key的话,显示隐藏列的时候,部分DOM不会重新渲染;因此我将每一行的行号作为key解决了这个问题!

<el-dialog title="明细" :visible.sync="dialogVisible" width="1200px" append-to-body>
      <el-table ref="tableRef" :key="currentRow.rowNo" :data="tableData" fit highlight-current-row :header-cell-style="headerCellStyle" max-height="350">
        <el-table-column
          label="需求数量"
          prop="quantity"
          align="center"
          min-width="130px"
          :render-header="addRedStar"
          show-overflow-tooltip
          fixed="left"
        >
          <template #default="{ row }">
            <el-input
              v-model="row.quantity"
              v-only-number="{ precision: 2, max: row.maxQuantity }"
              type="number"
              :disabled="!isEdit"
              :class="{ 'negative-number-color': formInfo.orderMode === 'Z010' }"
            />
            {{ row.maxQuantity }},{{ row.quantity }}
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button v-if="isEdit" type="primary" @click="saveList">确 定</el-button>
      </span>
    </el-dialog>
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazy★boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值