搜索

layui刷新当前页面

发表于 2026-10-17 05:57:40 来源:烟消火灭网

做后台管理项目那会儿,新当最烦的前页就是弹窗表单提交完,想刷新父页面数据却不知道怎么下手。新当用原生JS写window.location.reload()倒是前页能刷新,但整个页面白屏闪一下,新当体验很差。前页后来用上layui,新当发现它内部封装了一套自己的前页刷新机制,比直接reload优雅得多。新当

先说最常用的前页场景:你在一个数据表格页面,点击“编辑”弹出一个layer.open的新当iframe层,改完数据点保存。前页这时候父页面的新当表格还是旧数据,得刷新。前页很多人的新当第一反应是在子页面里写parent.location.reload()。能跑,但整个父页面所有东西都重新加载,左侧菜单、顶部导航全跟着闪一遍。如果父页面表格数据量大,加载要两三秒,用户盯着白屏,体验直接拉胯。

layui的做法是只刷新表格。父页面定义表格时给它一个id,比如lay-filter="test"或者直接用table.render()返回的实例。子页面保存成功后,通过parent.layui.table.reload('test')就能精准刷新那张表。页面其他部分纹丝不动。这比粗暴的reload高明太多。

但有个坑得注意:parent.layui要求父页面确实加载了layui模块。如果父页面用的是layui的模块化加载方式,layui.use(['table'], function(){ ...}),那parent.layui.table是能拿到的。可要是父页面用了layui.config()自定义模块路径,子页面直接访问parent.layui.table可能报undefined。我遇到过一回,排查半天,最后发现是父页面模块还没加载完,子页面就急着调用了。解决办法是在子页面里用setTimeout延迟一下,或者干脆在父页面暴露一个全局刷新函数,子页面直接调那个函数名,更可控。

还有一种情况:不用iframe,直接用layer.open的content传一段HTML字符串。这种弹层里的表单提交后,刷新父页面表格更简单——因为压根没有跨页面通信问题,直接在回调里写table.reload('test')就行。但要注意作用域,如果表格实例变量定义在layui.use回调内部,弹层里的代码访问不到。我习惯把表格实例挂到window上,比如window.myTable = table.render({ ...}),这样任何地方都能myTable.reload()。虽然污染全局变量不太优雅,但后台项目里图个方便,比来回传引用省事。

另外提一嘴,layui的table.reload默认会回到第一页。如果你在第3页编辑完,刷新后跳回第1页,用户得重新翻页,很烦。可以在reload时传参{ page: { curr: 当前页码}}保持页码。当前页码怎么拿?表格的done回调里有个res参数,里面带curr。我一般存到变量里,reload时带上。这个细节官方文档写得不算显眼,但实际项目里几乎必用。

最后说个偷懒方案:如果实在不想折腾父子页面通信,直接在子页面保存成功后写parent.location.reload()也不是不行。前提是父页面加载够快,或者你能接受那个白屏闪烁。小项目无所谓,大项目里用户会骂人。我现在的习惯是,能局部刷新绝不整体reload,能传函数绝不跨页面调layui内部方法。代码多写两行,体验好一大截。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by layui刷新当前页面,烟消火灭网   sitemap

回顶部