还是先上图,页面一直卡着,数据加载不出来,连表头都没有渲染出来。
首先我要说的是,我的所有字段都是正确的。表头字段与数据源不一致的情况,数据出不来,起码表格行数还在。我这是整个表格都没出来,字段名拼写错误的同学可以出门右转了。
控制台显示的卡住页面的节点信息,layui-table-init:
<div class="layui-table-init" style="background-color: #fff;">
<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>
</div>
搜了下网上很少有遇到我这种情况的同学,基本没有解决方案。看到有个同学和我有一样的问题:如何把父页面选择的表格数据在子页面渲染表格,获取到数据但表格一直转圈 · Issue #I3UQGQ · 贤心/layui - Gitee.com但是没有人给出解决方案。
说下我这样现象出现的背景,待会说解决方案。
我在主页面上打开了 一个子页面,在子页面请求数据,再将数据渲染到主页面上。我很肯定数据拿回来了,因为能打印出来,也不是表格节点不存在的问题。数据格式也是对的,因为复制下来请求数据,写死要渲染的数据源,表格是能正常渲染出来的。出不来的原因我至今没有找到,但是我找到了两个解决方案:
方案一:如果子页面上面东西不多时,可以把内容写在主页上,通过css控制是否显示。
方案二:在主页上再把子页面获取数据源的接口再请求一遍,子页把请求参数发给主页就行了。
上述两个方案都是我在工作中实际测试过的,可行。若还有不懂的可以留言交流。
经过另外查找资料:在一个帖子的回复里找到了比较正规的解决方案:layui table静态数据渲染失败_博问_博客园
把2.4.5版本中的table.js用工具格式化,找到第345行把判断修改即可:if (a.data && a.data.constructor === Array) {
修改为:if (a.data && Object.prototype.toString.call(a.data) == '[object Array]') {
或者修改为: if (a.data && $.type(a.data) == "array") {
原因是父子窗口的数组的constructor 构造函数引用不一致导致a.data.constructor === Array一直是false
公司用的layui版本为2.6.5,只有一个layui.js文件,可直接搜索a.data.constructor替换。