el-table <template slot=“header“>不更新问题

博客指出在Vue中控制台打印数据已更新,但修改后无效果,原因是:key的问题。表头用v-for循环生成,绑定key为prop,数据更新时key未变,el-table认为表头数据无变化,仅更新整体表格及key值有变化列的表头,建议key使用唯一值。

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

<el-table-column
      v-for="(v, i) in dateHeader"
      :key="i"
      align="center"
      width="100"
    >
      <template slot="header">
        <div>{{ v.date | moment("MM-DD") }}</div>
        <div>{{ $moment(v.date).weekday() | formatWeek }}</div>
      </template>
      <template slot-scope="{ row }">
          <span
            v-if="row[v.prop]"
            class="el-icon-check"
            style="color:#0095ff;font-weight: bold"
          ></span>
        <span v-else></span>
      </template>
    </el-table-column>

控制台打印 数据没问题 已经更新了

找了好多 说是需要<template slot="header">改为#header=“scope” 我改了之后,没有效果,最后发现是因为:key的问题,最好不要使用index做key,表头部分用v-for循环生成的,给每个item(el-table-colum)绑定的key为prop,数据更新时,key没有变,所以el-table觉得表头数据是没有变化的,因此就只更新了整体表格数据、key值有变化的列的表头。

所以,key使用唯一的值就好了

<el-table-column
				v-for="i in dateHeader"
				:key="i.date"
				align="center"
				width="100"
			>
				<template slot="header">
					<div>{{ i.date | moment("MM-DD") }}</div>
					<div>{{ $moment(i.date).weekday() | formatWeek }}</div>
				</template>
				<template slot-scope="{ row }">
					<span
						v-if="row[i.prop]"
						class="el-icon-check"
						style="color: #0095ff; font-weight: bold"
					></span>
					<span v-else></span>
				</template>
			</el-table-column>
<!--表格--> <el-table ref="tablelist" class="eltable" :data="model.tabledata.list" :height="model.tableheight" size="small" row-key="id" :highlight-current-row="true" @selection-change="handleTableChange" :default-sort="model.sort" @sort-change="sortchange" @row-contextmenu="rightclick" :default-expand-all="(model.config.childs.length>0 || model.config.istree) && model.config.opentable"> <el-table-column v-if="model.config.havecheck" type="selection" width="50" align="center"></el-table-column> <el-table-column v-if="model.config.haveid" type="" fixed="left" prop="id" label="编号" width="70" align="center"></el-table-column> <el-table-column label="明细表" width="80" type="expand"> <template slot-scope="childScope"> <el-table :data="JSON.parse(childScope.row.material)" size="small" class="eltable" :border="true" v-if="JSON.parse(childScope.row.material)&&JSON.parse(childScope.row.material).length" row-key="id"> <el-table-column type="expand" label="二级物料" width="80"> <template slot-scope="childScope1"> <el-table :data="childScope1.row.list" size="small" class="eltable" :border="true" v-if="childScope1.row.list&&childScope1.row.list.length" row-key="id" > <el-table-column label="三级物料" width="80"></el-table-column> <el-table-column label="序号" prop="id"></el-table-column> <el-table-column prop="proname" label="物料名称"></el-table-column> <el-table-column prop="procode" label="成品编码"></el-table-column> <el-table-column prop="specname" label="规格名称"></el-table-column> <el-table-column prop="speccode" label="规格编码"></el-table-column> </el-table> </template> </el-table-column> <el-table-column label="序号" pr
03-28
<template> <div> <div> <!--搜索栏--> <el-input v-model="name" placeholder="请输入菜单名称" style="width: 200px" prefix-icon="el-icon-user"></el-input> <el-button class="el-icon-search" style="margin-left: 10px" type="primary" @click="load">查询</el-button> <el-button class="el-icon-refresh" style="margin-left: 10px" type="warning" @click="reset">重置</el-button> </div> <div style="margin-top: 20px;margin-bottom:35px;"> <!-- 新增、批量删除 --> <el-button class="el-icon-plus" style="margin-right: 10px" type="success" @click="save(null)">新增</el-button> <el-button class="el-icon-close" style="margin-left: 10px" type="danger" @click="deleteByids" >批量删除</el-button> </div> <el-table :data="tableData" border stripe :header-cell-style="getRowClass" @selection-change="handleSelectionChange" row-key="id" border default-expand-all> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="id" label="id"></el-table-column> <el-table-column prop="name" label="菜单名称"></el-table-column> <el-table-column prop="path" label="菜单路径"></el-table-column> <el-table-column prop="icon" label="菜单图标"> <template v-slot:default="scope"> <i :class="scope.row.icon"></i> </template> </el-table-column> <el-table-column prop="pagePath" label="页面路径"></el-table-column> <el-table-column prop="description" label="菜单描述"></el-table-column> <el-table-column prop="sortNum" label="排序"></el-table-column> <el-table-column label="操作" width="300"> <template v-slot="scope"> <div class="action-buttons"> <!-- 添加容器方便布局 --> <el-button type="success" size="mini" class="compact-btn" @click="save(scope.row.id)" v-if="!scope.row.pid && !scope.row.path">新增子菜单</el-button> <el-button type="prima
03-29
以下代码如何使用el-container 满屏填充,<script setup> </script> <template> <div id="SelectPage"> <el-container style="height: 100%; border: 1px solid #eee"> <el-aside width="200px" style="background-color: rgb(238, 241, 246)"> <el-menu :default-openeds="['1']"> <el-submenu index="1"> <template slot="title"><i class="el-icon-menu"></i>档案管理</template> <el-menu-item-group> <template slot="title">文件</template> <el-menu-item index="1-1">档案目录列表</el-menu-item> <el-menu-item index="1-2">上传档案文件</el-menu-item> </el-menu-item-group> <!-- <el-menu-item-group title="分组2">--> <!-- <el-menu-item index="2-3">选项3</el-menu-item>--> <!-- </el-menu-item-group>--> </el-submenu> </el-menu> </el-aside> <el-container> <el-header style="text-align: right; font-size: 12px"> 项目编号:<el-input v-model="projectCodeForSearch" placeholder="请输入项目编号"></el-input> <!-- <el-button type="primary" icon="el-icon-search" @click="selectByCode">搜索</el-button>--> <el-button type="primary" icon="el-icon-search" @click="selectByCode">搜索</el-button> <el-button type="primary" @click="uploade">上传<i class="el-icon-upload el-icon--right"></i></el-button> </el-header> <el-main> <el-table :data="tableData"> <el-table-column type="index" width="50"> </el-table-column> <el-table-column prop="projectCode" label="项目编号" width="120"> </el-table-column> <el-table-column prop="dirPath" label="文件路径" width="120"> </el-table-column> <el-table-column prop="updateTime" label="修改时间" width="120"> </el-table-column> <el-table-column prop="updateUser" label="修改用户" width="120"> </el-table-column> <el-pagination :page-size="page.pageSize" :current-page.sy
03-08
<el-table :data="pageModel.list" style="margin-top: 10px" :header-cell-style="{ background: '#D5E1EB', color: '#000000' }" border> <el-table-column label="序号" type="index" align="center" width="50" /> <el-table-column label="警号" prop="userId" align="center" /> <el-table-column label="用户名称" prop="userName" align="center" /> <el-table-column label="用户昵称" prop="nickName" align="center" /> <el-table-column label="部门" prop="dept.deptName" align="center" /> <el-table-column label="手机号" prop="phonenumber" align="center" /> <el-table-column label="状态" prop="status" align="center"> <template slot-scope="scope"> <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" /> </template> </el-table-column> <el-table-column label="创建时间" prop="createTime" align="center" /> <el-table-column label="操作" align="center" width="300"> <template slot-scope="scope"> <el-button type="text" style="color: #ff5959" v-if="jurisdiction('system:user:remove') === true" @click="deleteHandle(scope.row)">删除 </el-button> <el-button type="text" style="color: #1890ff" v-if="jurisdiction('system:user:edit') === true" @click="editHandle(scope.row)">修改 </el-button> <el-button type="text" style="color: #1ab394" v-if="jurisdiction('system:user:query') === true" @click="lookHandle(scope.row)">查看 </el-button> <el-button type="text" style="color: #ff8d00" v-if="jurisdiction('system:user:resetPwd') === true" @click="resetPasswordsHandle(scope.row)">重置密码 </el-button> </template> </el-table-column> </el-table>怎么禁用管理页的修改
最新发布
07-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值