## 4.12.动态模板
直接赋值数据:
```html
<script type="text/html" ew-tpl="['a','b','c']" data-done="layui.form.render()">
<div>
{{# layui.each(d,function(i,item){ }}
<div>{{item}}</div>
{{# }); }}
</div>
</script>
<!-- 也可以引用变量 -->
<script id="userListTpl" type="text/html" ew-tpl="userList">
<div>
{{# if(d){ }} <!-- 这里判断以下因为可能值还没定义 -->
{{# layui.each(d,function(i,item){ }}
<div>{{item}}</div>
{{# }); }}
{{# } }}
</div>
</script>
<script>
layui.use(['admin'], function() {
window.userList = ['a', 'b', 'c'];
// admin模块一加载会自动渲染,但userList还未定义,所以定义完要重新渲染
admin.renderTpl('#userListTpl');
});
</script>
```
使用远程数据,注意要加引号`'user.json'`:
```html
<script type="text/html" ew-tpl="'user.json'" data-method="post"
data-where="{sex:'女'}" data-headers="{token: 'xxx'}">
<div>
{{# layui.each(d.data,function(i,item){ }}
<div>{{item.username}}</div>
{{# }); }}
</div>
</script>
```
通过`ew-tpl`来表示这是一个动态模板以及设置数据源,通过`data-xxx`配置其他参数:
- done   渲染完成后的回调
- url   远程数据的url
- method   远程数据的请求方式
- where   远程数据的请求条件,也可以`data-where="JSON.stringify({})"`
- headers   远程数据的请求header
- content-type   如`data-content-type="application/json;charset=UTF-8"`
注意远程数据url一定要加引号,加引号的好处你还可以这样使用:
```
ew-tpl=" layui.setter.baseServer + '/user.json' "
```
动态模板会在页面加载后自动渲染,如果要重新渲染:
```javascript
admin.renderTpl('#userListTpl'); // 参数为模板的jquery选择器
```
**使用例子,比如用户管理的搜索里面的性别下拉换成动态的:**
```html
<!-- 表格工具栏 -->
<form class="layui-form toolbar">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">性 别:</label>
<script type="text/html" ew-tpl="'../../json/sex.json'" data-done="layui.form&&layui.form.render('select');">
<div class="layui-input-inline">
<select name="sex">
<option value="">选择性别</option>
{{# layui.each(d.data,function(i,item){ }}
<option value="{{item.value}}">{{item.name}}</option>
{{# }); }}
</select>
</div>
</script>
</div>
</div>
</form>
<!-- 数据表格 -->
<table id="userTable" lay-filter="userTable"></table>
```
sex.json数据:
```json
{"code": 200, "data": [{"name": "男", "value": 0}, {"name": "女", "value": 1}]}
```
注意这里有个小细节,select上面还有一个div,对于select的动态模板,建议select外面最好多一层,因为select会被layui美化,
外面不加一层当重新渲染模板的时候不能把layui美化的旧的select移除,另外`ew-tpl="'sex.json'"`这里先是双引号再是单引号,不要漏掉了。
- 更新日志
- 开始使用
- 导入项目
- 项目结构
- index.html结构说明
- 添加一个菜单
- common.js说明
- 修改默认配置
- ID命名规范
- index模块
- 加载默认主页
- 打开一个选项卡
- 关闭指定选项卡
- 清除Tab记忆
- 修改Tab标题
- 切换Tab自动刷新
- 侧边栏手风琴折叠
- admin模块(基础)
- 全部方法
- 弹窗相关方法
- 加载层loading
- ajax封装
- 缓存操作putTempData
- 锁屏功能
- ew-event事件绑定
- open弹窗事件
- logout事件
- admin模块(进阶)
- 文字提示
- 地图选择位置
- 裁剪图片
- 动画数字
- 经纬度转换
- 深度克隆对象
- 判断富文本是否为空
- 移除指定style
- 模板引擎
- 滚动到顶部
- 事件监听
- 动态模板
- 公共样式
- 公共类
- 组件样式
- 表单弹窗
- 表格工具栏
- 垂直选项卡
- 徽章扩展
- 下拉树单选
- fixed方式select
- 扩展组件(常用)
- 1.下拉菜单
- 快速使用
- 更多样式
- 对任意元素使用
- 带遮罩层
- 自定义下拉内容
- 控制显示方向
- 在数据表格中使用
- 气泡确认框
- 2.消息通知
- 快速使用
- 全部方法
- 参数列表
- 解决弹窗遮挡
- 3.级联选择器
- 快速使用
- 异步加载
- 自定义分隔符
- 搜索功能
- 省市区选择
- 全部方法
- 全部参数
- 4.标签输入框
- 快速使用
- 全部参数
- 5.分割面板
- 快速使用
- 垂直分割
- 嵌套使用
- 6.环形进度条
- 快速使用
- 全部参数
- 自定义样式
- 7.步骤条
- 快速使用
- 风格选择
- 上一步下一步
- 禁止标题点击
- 扩展组件(进阶)
- 1.表单扩展tableX
- 全部方法
- 合并单元格
- 行绑定鼠标右键
- 后端排序
- 前端分页排序
- 导出数据
- 导出全部、搜索
- 后端导出
- 2.表单扩展formX
- 验证规则
- 扩展方法
- 渲染select封装
- 验证码倒计时
- 获取修改字段
- 3.打印插件
- 打印当前页面
- 设置不打印元素
- 打印自定义内容
- 分页打印
- 拼接html
- 4.鼠标右键
- 快速使用
- 自定义使用
- 动态元素绑定
- 5.数据列表dataGrid
- 快速使用
- 全部参数
- 分页功能
- 加载更多功能
- 实例方法
- 自动渲染
- 6.文件选择器
- 快速使用
- 全部参数
- 第三方插件
- 鼠标滚轮监听
- 二维码模块
- 引导插件
- 剪贴板
- 视频播放器
- 富文本编辑器
- 更多功能
- 主题功能
- 自定义扩展模块
- 增加按钮权限控制
- table统一设置headers
- 弹窗专题
- 第一种 页面层弹窗
- 第二种 iframe弹窗
- 第三种 url方式弹窗
- 第四种 捕获层弹窗
- 四种方式选择指南
- admin.modelForm方法
- 参数传递方法详解
- 刷新url方式弹窗
- 弹窗使用模板引擎
- 弹窗内组件不渲染
- 常见问题
- 后端生成侧边栏
- ajax加载侧边栏
- 多系统模式
- logo文字换行显示
- 侧边栏全部展开
- 侧边栏折叠图标放大
- 弹窗下拉框出现滚动条
- 弹窗宽度不能超出屏幕
- 表单文字出现换行
- select、radio不显示
- 日期laydate不能显示
- 弹窗打开后按enter无限打开
- 表单提交post变成了get
- 修改表格背景和边框颜色
- 修改placeholder颜色
- IE数据表格缓存严重
- 使用parent.layer问题
- 表格打印太长列未换行
- 弹窗layer.js报错404
- 表格请求去掉page和limit
- 侧边栏折叠卡顿
- 图片表格点击查看
- 常用实例
- 表格内switch获取行数据
- 表格回显复选框
- 表格工具列动态显示
- 表单提交数组
- 重载表格重置排序
- laydte动态控制日期限制
- 下拉树一些数据不可选
- 修改弹窗禁用输入框
- 表格中下拉框数据动态
- 实现点击后转一圈
- 页面下拉框数据动态
- 表格动态tool事件处理
- 表格复选框和序号列合并
- 表单提交带文件上传
- 单标签模式加居中文字