《layui宇宙版教程》:模板引擎laytpl

《Layui宇宙版教程》提供2000人的QQ群进行交流学习,QQ群号:1046961650,或通过手机QQ扫描二维码进入:

 

1.22 模板引擎laytpl

laytpl是JavaScript模板引擎,在字符解析上有着比较出色的表现,欠缺之处在于异常调试上。

模块加载名称:laytpl。

在线调试:

http://www.layui.com/demo/laytpl.html

1.22.1 模板的快速使用

与一般的字符拼接不同的是,laytpl模板可与数据分离,集中把逻辑处理放在View层,提升代码可维护性,尤其是针对大量模板渲染的情况。

 

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <script>

           var laytpl = layui.laytpl;

 

           //直接解析字符

           laytpl('{{ d.name }}是一位公猿').render({

              name: '贤心'

           }, function(string) {

              console.log(string); //贤心是一位公猿

           });

 

           //也可以采用下述同步写法,将render方法的回调函数剔除,可直接返回渲染好的字符

           var string = laytpl('{{ d.name }}是一位公猿').render({

              name: '贤心'

           });

           console.log(string); //贤心是一位公猿

 

           //如果模板较大,你也可以采用数据的写法,这样会比较直观一些

           var string = laytpl([

              '{{ d.name }}是一位公猿', '其它字符 {{ d.content }}  其它字符'

           ].join('')).render({

              name: '贤心',

              content: 'xyz',

           });

           console.log(string); //贤心是一位公猿

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.22.2 可以将模板存储在页面或其它任意位置

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

         <h3>{{ d.title }}</h3>

         <ul>

         {{# layui.each(d.list, function(index, item){ }}

           <li>

             <span>{{ item.modname }}</span>

             <span>{{ item.alias }}</span>

             <span>{{ item.site || 'site为空' }}</span>

           </li>

         {{# }); }}

         {{# if(d.list.length === 0){ }}

           无数据

          {{# } }}

         </ul>

       </script>

 

        <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

 

           var data = { //数据

              "title": "Layui常用模块",

              "list": [{

                  "modname": "弹层",

                  "alias": "layer",

                  "site": "layer.layui.com"

              }, {

                  "modname": "表单",

                  "alias": "form"

              }]

           }

           var getTpl = demo.innerHTML;

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    以上代码的执行过程为:data+laytpl模板=最终的html代码。

 

    运行效果如图1-xx所示。

1.22.3 模版语法

    模板语法如图1-xx所示。

 

1.22.3.1 转义{{ d.field }}

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

           <div>

              {{ d.htmlCode }}

           </div>

       </script>

 

       <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

 

           var data = { //数据

              "htmlCode": "<input type='button' value='添加'/>"

           }

           var getTpl = demo.innerHTML;

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.22.3.2 不转义{{= d.field }}

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

        <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

           <div>

              {{=d.htmlCode}}

           </div>

       </script>

 

       <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

 

           var data = { //数据

              "htmlCode": "<input type='button' value='添加'/>"

           }

           var getTpl = demo.innerHTML;

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.22.3.3 {{# JavaScript表达式 }}

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

           {{# 

             var fn = function(){

               return '2020-1-1';

             };

           }}

            

           {{#  if(true){ }}

             开始日期:{{ fn() }}

           {{#  } else { }}

             已截止

           {{#  } }}

       </script>

 

       <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

           var getTpl = demo.innerHTML;

           var data = {};

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

1.22.3.4 {{! template !}}忽略模板代码

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

           {{! d.username !}}

           <br/>

           {{ d.password }}

        </script>

 

       <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

           var getTpl = demo.innerHTML;

           var data = {

              "usernane": "账号",

              "password": "密码"

           };

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.22.3.5 结合for循环

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

        <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <!--第一步:编写模版。可以使用一个<script>标签存放模板,示例代码:-->

       <script id="demo" type="text/html">

           {{#

           for(var i=0;i<d.list.length;i++){ }}

           {{d.list[i]}}<br/>

           {{# } }}

       </script>

 

       <!--第二步:建立视图。用于呈现渲染结果。-->

       <div id="view"></div>

 

       <!--第三步:渲染模版-->

       <script>

           var laytpl = layui.laytpl;

           var getTpl = demo.innerHTML;

           var data = {

              list: ['a', 'b', 'c']

           };

           var view = document.getElementById('view');

           laytpl(getTpl).render(data, function(html) {

              view.innerHTML = html;

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值