首页 > 其他分享 >element ui 动态表头不刷新问题

element ui 动态表头不刷新问题

时间:2024-05-22 19:41:49浏览次数:17  
标签:slot el 表头 element ui 视图 key table

今天弄vue前端,动态表头出现如题问题。代码如下

<el-table-column v-for="(item, index) in tableHeads" :key="index">
<template slot="header">
//处理表头业务逻辑……
  <div>{{ item.num }}</div>
</template> </el-table-column>

  搜索了半天,开始以为是vue数据绑定刷新问题,后发现不是这个原因。因为表格数据是刷新的。

       继续搜了搜,最终依靠这篇博文解决问题。记录一下地址:

前端 - [Vue] 解决el-table表头视图不更新 - 个人文章 - SegmentFault 思否    https://segmentfault.com/a/1190000040819184

[Vue] 解决el-table表头视图不更新 (yuque.com)     https://www.yuque.com/dirackeeko/blog/gegpzk

  最终修改 <template slot="header"> 为<template #header>  ,:key="index"  修改为:key="Math.random()"。问题解决。

 下面是别人分析问题的思路,记录学习一下:

查找类似原因并分析:
Case1
CSDN上有其他同学遇到了表头不更新的问题,它的原因是
表头部分用v-for循环生成的,给每个item(el-table-colum)绑定的key为prop,数据更新时,key没有变,所以el-table觉得表头数据是没有变化的,因此就只更新了整体表格数据、key值有变化的列的表头。

这里我遇到的情况,从表头数据4个变成3个视图变化,从3个变成4个视图变不回去,那么大概率不是这个问题。
用vue devtools查看el-table的内容,发现从3个变回4个时,<ElTableColumn>也是4个,<ElTableHeader>的columnsCount属性变回了4,确定el-table是知道数据变化的。

测试直接用el-table不做封装,来回变更也是正常的。

Case2
使用 slot="header",导致自定义表头视图不更新
case2的具体情况是element 官网上el-table上使用插槽 slot=“header”来实现自定义表头,
而这种插槽的使用方式会导致视图更新失效。将slot=“header” 改成#header ,就可以解决他的问题了。

注:
v-slot 指令自 Vue 2.6.0 起被引入,提供更好的支持 slot 和 slot-scope attribute 的 API 替代方案。在接下来所有的 2.x 版本中 slot 和 slot-scope attribute 仍会被支持,但已经被官方废弃且不会出现在 Vue 3 中。

判断就是经过封装后的table组件在处理视图更新的时候出现了异常。
再深层次的原因没有探究,解决思路是监听传入tableTitle的变化,如果有变化就让组件强制刷新。
方案是在组件el-table上绑定一个number类型的key,初始值为1,当传入的tableTitle变更时,key加1

   

标签:slot,el,表头,element,ui,视图,key,table
From: https://www.cnblogs.com/yetiea/p/18206947

相关文章

  • 离线文档(vue/react/element/element-plus/ands vue等等)
    特殊环境需要离线状态文档的请参考这里 可以在你所想要的东西在github的官方项目上找一个名字包含‘gh-page’或者‘get-page’的分支下载下来然后本地win+Rcmd输入npminstallsgo-g全局下载sgo之后在你下载下来的文件夹根目录cmd打开终端输入sgo--fallindex.html......
  • vue搭建脚手架 出现问题Command vue init requires a global addon to be installed.
    使用vue-cli脚手架命令vueinitwebpackmy-App创建项目回车时显示Commandvueinitrequiresa global addontobeinstalled.Pleaserun yarn globaladd@vue/cli-initandtryagain. 解决方法:npminstall-g@vue/cli-init 然后创建项目,正常。 ......
  • 使用安卓片段创建动态-UI-全-
    使用安卓片段创建动态UI(全)原文:zh.annas-archive.org/md5/483E44769E1E47CD0C380E136A5A54D5译者:飞龙协议:CCBY-NC-SA4.0前言移动应用静态用户界面挤在微小屏幕上的日子已经一去不复返了。如今,用户期望移动应用是动态且高度交互的。他们希望在中分辨率智能手机上查看应用......
  • duilib 自定义控件
    1.主窗口自定义FramWnd继承WindowImplBase,重写CreateControl,HandleMessage.组合CPaintManagerUI.2.自定义控件自定义mycontrol继承CControlUI重写DoEvent,DoPaint,SetPos.main.cpp#include"FramWnd.h"intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCE/*hPrev......
  • Serilog日志输出到WPF UI控件
    使用到日志接收器的接口 ILogEventSinkWPF+Prsim+Serilog详细介绍链接 https://github.com/serilog/serilog/wiki/Developing-a-sink   publicinterfaceILogEventSinkWrite:ILogEventSink{LogEventGetLogMessage();}publicclassLogEventSink:I......
  • Unity设置UI和Render的渲染层级
    通过给UI或物体挂载下面脚本,来设置层级usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;namespaceCommon{//设置UI和render的层级publicclassUIDepth:MonoBehaviour{publicintorder;publicboolisUI=true;......
  • layui laydate日期时间范围,时间默认设定为23:59:59
    在Layui中,如果你想设置日期时间选择器(datetime)的默认结束时间为当天的23:59:59,你可以使用如下代码(红色部分):laydate.render({elem:'#test10',type:'datetime',range:true,max:'{:date("Y-......
  • Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能
    前言#在SwaggerUI中加入登录验证,是我很早前就做过的,不过之前的做法总感觉有点硬编码,最近.Net8增加了一个新特性:调用MapSwagger().RequireAuthorization来保护SwaggerUI,但官方的这个功能又像半成品一样,只能使用postmancurl之类的工具带上Authorizationheader来请......
  • qt中添加多个UI界面,并在其他文件中调用该UI界面
    一、概述qt创建一个新项目时,会创建一个属于mainwindow'的主ui界面,这时如果想要创建多个窗口,可以有三种方法。第一种:使用代码创建一个新窗口,优点是灵活,缺点是麻烦,其中控件和布局都需要代码来创建。第二种:在ui设计界面使用tabwidget控件来达到多个窗口的效果,不过这种方法只能......
  • Unity制作一个BroadcastUI 跑马灯文字广播
     usingDG.Tweening;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUtils;//挂在UI上面publicclassBroadcastUI:MonoBehaviour{privateboolinited=false;privateBroadcastManbm;......