【Element】el-table-column 使用slot插槽v-if数据更新后没有渲染

这篇博客介绍了在Vue中使用Element-UI时,由于DOM复用导致表格列显示异常的问题。解决方案是在表格列及后续组件上添加`:key`属性,并赋值为`Math.random()`,以避免DOM被复用。这能确保每次渲染时表格列都是唯一的,从而正确显示内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因是因为表格是element-ui通过循环产生的,而vue在dom重新渲染时有一个性能优化机制,就是相同dom会被复用,通过key去标识一下当前行是唯一的,不许复用,就行了。

在其和其之后的一个显示的组件上添加 :key="Math.random()"

<el-table-column
          :label="$t('customer.name')"
          prop="name"
          :show-overflow-tooltip="true"
          v-if="showColumn('Name')"
          :sort-orders="['descending', 'ascending']"
          :key="Math.random()"
        >
          <template slot="header">
            <span>{{ $t('customer.name') }}</span>
            <span
              class="icon-wrapper"
              v-if="isSortable('customerName')"
              @click="handleSortTable('customerName')"
            >
              <svg-icon
                iconClass="caret-bottom"
                v-if="sortProp === 'customerName' && sortOrder === 'ascending'"
              />
              <svg-icon
                iconClass="caret-top"
                v-else-if="
                  sortProp === 'customerName' && sortOrder === 'descending'
                "
              />
              <svg-icon v-else iconClass="caret-null" />
            </span>
          </template>
..............................

参考博客

Element-UI el-table-column 使用slot插槽 v-if 报错

el-table-columnElement UI中的一个表格列组件,用于定义表格的列。它提供了一个名为slot的属性,用于自定义列的内容。 通过使用slot,我们可以在el-table-column中插入自定义的内容,以满足特定的需求。slot可以是一个具名插槽,也可以是一个默认插槽。 具名插槽允许我们在el-table-column中定义多个不同的插槽,并在使用组件时根据需要选择插入哪个插槽。例如,我们可以在el-table-column中定义一个名为header插槽,用于自定义表头的内容;还可以定义一个名为default的插槽,用于自定义单元格的内容。 默认插槽el-table-column的主要插槽,用于定义列的内容。如果没有定义具名插槽,那么默认插槽中的内容将被渲染为列的内容。 下面是一个示例代码,展示了如何使用el-table-columnslot: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"> <template slot="header"> <!-- 自定义表头内容 --> <span>自定义表头</span> </template> <template slot-scope="scope"> <!-- 自定义单元格内容 --> <span>{{ scope.row.name }}</span> </template> </el-table-column> </el-table> </template> ``` 在上面的代码中,我们在el-table-column中定义了一个具名插槽header和一个默认插槽。在header插槽中,我们自定义了表头的内容;在默认插槽中,我们使用slot-scope来获取当前行的数据,并自定义了单元格的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值