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

1
2
<el-table-column v-for="(item, index) in tableHeads" :key="index">
<template slot="header"><br>//处理表头业务逻辑……  <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

 
 
posted @ 2024-05-22 19:30 半边书生9527 阅读(865) 评论(0) 推荐(0)
摘要: mysql 忘记密码 阅读全文
posted @ 2020-06-22 14:54 半边书生9527 阅读(157) 评论(0) 推荐(0)
摘要: 前两天项目中因为历史原因数据库中的一个字段是varchar类型,在做SQL参数化处理时候默认都是DbType.String,免得查询出现数据转换,于是做类型一致,搜了下对应关系还没找到,只好自己打开SQL SERVER Profiler跟踪了下,对应如下:DbType.String——>nvar... 阅读全文
posted @ 2015-08-18 15:39 半边书生9527 阅读(1067) 评论(0) 推荐(0)
摘要: 要在新机器上安装memcached和mongodb服务,折腾了一天,终于把这两个服务在windows下跑起来了。 memcached主要参考http://www.rootop.org/pages/2768.html或者类似的基本都能搞定。 如果要在机器上启动多个memcached服务,参考h... 阅读全文
posted @ 2015-05-12 18:58 半边书生9527 阅读(218) 评论(0) 推荐(0)
摘要: 如题: 使用web.config的configuration/location节点. 在configuration节点内新建一个location节点,注意这个节点和system.webserver那些是平级节点 然后使用location/@path 来指定某个单独的文件,这个文件可以是as... 阅读全文
posted @ 2014-08-06 15:52 半边书生9527 阅读(312) 评论(0) 推荐(0)
摘要: 这几天使用vs2010,调试时候经常未响应,等了半天才缓过来,严重影响心情,决定解决这个问题。 搜寻一番,试着关闭VS,重新设置了vs2010的环境(在vs2010命令提示符下,执行devenv.exe /resetuserdata),重启VS,问题解决,记录一下。 参考自:http://blog.csdn.net/kupepoem/article/details/6584667 阅读全文
posted @ 2013-11-25 17:31 半边书生9527 阅读(1649) 评论(0) 推荐(0)
摘要: 最近在项目中需要用到多线程,考虑了一番,选择了ThreadPool,我的需求是要拿到线程执行方法的返回值,但是ThreadPool.QueueUserWorkItem的回调方法默认是没有返回值的,搜了搜,都是简单介绍ThreadPool.QueueUserWorkItem的各种用法,只能自己想办法了。 回调方法不带返回值,迂回一下,回调方法用对象的方法,返回值放在对象的属性中,在对象方法执行时将需要的返回值赋值给对应属性。等所有线程执行完,循环对象列表,取回返回值,然后想怎么处理返回值就OK了。上代码: 封装对象: 1 using System; 2 using System.Thr... 阅读全文
posted @ 2013-10-10 18:29 半边书生9527 阅读(6917) 评论(2) 推荐(0)
摘要: 在项目中遇到js中escape过的json字符串,需要在C#中对应模拟编码,记得原来遇到过这个问题,但是当时没记录下来方案,于是又搜索了一番,发现别人说的都是HttpUtility.UrlEncode方法,但是在使用中发现有汉字时得到的结果并不一致,试了几个不同的编码方式,始终得不到一致,最后试了HttpUtility.UrlEncodeUnicode方法,发现结果一致,记录一下。 阅读全文
posted @ 2013-08-02 09:26 半边书生9527 阅读(812) 评论(0) 推荐(0)
摘要: 原文:http://improve.dk/making-url-rewriting-on-iis7-work-like-iis6/Upgrading to IIS 7 should be rather transparent, unfortunately that is not the case when itcomes to URL rewriting as we knew it from IIS 6. In IIS 6 all we had to do was to add a wildcard mappingmaking sure that all requests went throu 阅读全文
posted @ 2013-01-22 16:56 半边书生9527 阅读(12223) 评论(2) 推荐(0)
摘要: 原文链接 浏览器兼容之旅的第二站:各浏览器的Hack写法前面一节《浏览器兼容之旅的第一站:如何创建条件样式》和大家一起探讨了如何创建条件样式,了解和学习了创建IE条件样式的方法以及他们所起的作用,特别是知道了条件注释所起的作用。。那么这一节将和大家一起学习:浏览器兼容之旅的第二站:各浏览器的Hack写法虽然和大家在一起学习各浏览器的Hack的写法,但我还是要说“Hack对于一位专业的前端攻程师来说并不是一样很好的东西,我力求处理浏览器兼容,尽量不使用Hack写法来处理,除非实在没有办法的情况下,再加以使用。”下面我们先来简单的了解一下什么是CSS Hack。Hack是针对不同的浏览器去写不同的 阅读全文
posted @ 2012-11-07 18:28 半边书生9527 阅读(266) 评论(1) 推荐(0)
点击右上角即可分享
微信分享提示