3.3 layer 与工具组件心得:弹层、日期、模板引擎
layer:iframe 层的适用与代价
layer 支持多种弹层形态,覆盖了弹窗场景的绝大多数需求。我的选择依据先看一张表:
| 形态 | 典型用途 | 心得 |
|---|---|---|
| 页面层 | 详情、提示、短表单 | 内容简单时的首选 |
| iframe 层 | 独立交互流程 | 有通信与加载双重代价 |
| 图片层 | 相册预览 | 开箱即用 |
| tips 层 | 字段旁的小气泡 | 注意偏移与出界 |
| prompt 层 | 快速收集一个值 | 回调闭包直接带业务数据 |
iframe 层最诱人也最有代价。适合的场景是内容自成一体、有独立交互流程,比如完整的编辑向导,塞进当前页面反而互相干扰。代价要心里有数:上下文隔离导致父子页通信要走专门接口,加载多一整个页面的开销,移动端适配也要另算。我的分界线是——交互简单就页面层加 HTML,流程复杂才动用 iframe 层。
tips 层的偏移参数值得单独说:方向参数决定气泡朝哪边弹出,再配合偏移量微调,才能贴得舒服。写完务必把窗口拉窄看一眼,tips 出界是最常见的翻车点。
prompt 与 confirm 都支持回调闭包:点击确定后拿到输入值或确认结果,再执行业务。闭包住了外层作用域,意味着可以把当前行的数据直接带进回调,不必再查一遍。删除确认、单字段快速修改这类场景,一个 prompt 加一个闭包就足够优雅。
弹层一多就要有节制。同一屏不要叠太多层,嵌套弹层尽量收敛成页面内流程;关闭动作统一交给组件自带的机制,别自己另造一套关闭逻辑,否则状态收尾容易漏,残留的遮罩和数据多半就是这么来的。
laydate:range 与格式化
laydate 的高频用法就两个:range 开启范围选择,一个控件解决起止日期;format 自定义输出格式,把日期串成接口要的样子,省去前端再拼一道字符串。年月日时分等类型切换在文档里有对应配置,用到时查官方文档即可,不必背。
几条心得:
- 范围选择配合表格查询是管理后台的标配组合,起止值一起拿到,不必拼两个控件;
- 输出格式全部交给 format,接口要什么格式就配什么格式,前端不做二次加工;
- 控件放在窄容器里时留意弹出方向,避免面板被边缘裁切或遮挡。
laytpl:2.11 重构后的新体验
2.11 对 laytpl 做了重构,变化有三处:新标签风格 {{ }},写起来更现代;include 支持子模板,公共片段可以拆出去复用;extendVars 支持扩展变量,模板里能拿到数据之外的辅助内容。
我特别想强调一个习惯:输出要区分转义。两种写法只差一个等号(以官方文档为准):
{{ d.remark }}
{{= d.remark }}
前者原样输出,后者转义输出。列表页、详情页凡是渲染用户可控内容的一律转义,这是防 XSS 的基本盘,也是模板引擎时代最容易省掉的一步。
include 拆公共模板的心得也值得展开:操作按钮列、状态徽标这类反复出现的片段,拆成子模板后改一处全局生效,列表页和详情页还能共用同一份徽标定义;extendVars 则适合塞字典表、枚举文案这类与单条数据无关但每个页面都要用的辅助内容,模板里随取随用,不必把所有东西都塞进数据对象。
场景选型速查表
| 场景 | 用哪个组件 | 心得一句话 |
|---|---|---|
| 详情弹窗 | layer 页面层 | 简单内容别上 iframe |
| 独立编辑流程 | layer iframe 层 | 通信成本要计入设计 |
| 字段说明气泡 | layer tips | 窄屏必查出界 |
| 快速收集一个值 | layer prompt | 闭包直接带上业务数据 |
| 起止日期筛选 | laydate range | format 直接吐接口格式 |
| 复杂单元格渲染 | laytpl | 转义输出成肌肉记忆 |
心得小结
这三个组件的共性是轻、独立、随取随用。用 layer 前先想清楚要不要 iframe,用 laydate 时把格式交给 format,用 laytpl 时把转义刻进手指记忆。工具组件没有多少高深技巧,分寸感本身就是技巧。
