zoukankan      html  css  js  c++  java
  • 337 模板引擎artTemplate

    是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。


    为什么要使用模板引擎

    我们通过ajax获取到数据后,需要把数据渲染到页面,在学习模板引擎前,我们的做法是大量的拼接字符串,对于结构简单的页面,这么做还行,但是如果页面结构很复杂,使用拼串的话代码可阅读性非常的差,而且非常容易出错,后期代码维护也是相当的麻烦。

    【演示:使用拼串进行渲染的缺点.html】

    作用:代替前面渲染数据是拼接字符串操作

    实际工作渲染数据使用的模板引擎


    常见的模板引擎

    BaiduTemplate:http://tangram.baidu.com/BaiduTemplate/
    velocity.js:https://github.com/shepherdwind/velocity.js/
    ArtTemplate:https://github.com/aui/artTemplate

    artTemplate是使用最广泛,效率最高的模板引擎,需要掌握。


    artTemplate的使用

    github地址

    中文api地址

    artTemplate语法

    1、{{}}中写js代码


    2、if语法

    {{if gender='男'}} // 开始
      <div class="man">
    {{else}}
      <div class="woman">
    {{/if}} // 结束
    

    补充

    {{if gender='男'}}
      <div class="man">
    {{else if}}
      <div class="woman">
    {{else}}
      <div class="other">
    {{/if}}
    

    3、each语法【循环遍历】

    <!--
      1. {{each data}}: 可以通过$value 和 $index获取值和下标
      2. {{each data v i}}: 自己指定值为v,下标为i。【v代表当前循环项,i不是必写。】
    -->
    {{each data v i}}
    <li>
      <a href="{{v.url}}">
        <img src="{{v.src}}" alt="">
        <p>{{v.content}}</p>
       </a>
     </li>
    {{/each}}
    
    //如果返回的数据是个数组,必须使用对象进行包裹,因为在{{}}中只写书写对象的属性。
    var html = template("navTmp", {data:info});
    

    artTemplate使用步骤

    1.引入模板引擎的js文件

    <script src="template-web.js"></script>
    

    2.准备模板

    注意: 
    1- 模版接收的数据必须是对象{},如果不是,要把数包装成对象,在进行使用
    2- 在模版中直接使用属性名,不需要写对象名
    
    <!-- 指定了type为text/template后,这一段script标签并不会解析,也不会显示。 -->
    <!-- type="text/html" -->
    <script type="text/template" id="tmp"> 
      <p>姓名:{{ username }}</p>  
      <p>年龄:{{ age }}</p>
      <p>技能:{{ skill }}</p>
      <p>描述:{{desc }}</p>
    </script>
    

    3.准备数据

    // 3. 准备数据,数据是后台获取的,可以随时变化
    var json = {
      userName:"隔壁老王",
      age:18,
      skill:"查水表",
      desc:"年轻气壮"
    }
    

    4.将模板与数据进行绑定

    注意:传递给模板引擎的数据必须是对象

    // 第一个参数:模板的id
    // 第二个参数:数据
    // 返回值:根据模板生成的字符串。
    var html = template("myTmp", json);
    console.log(html);
    

    5.将数据显示到页面

    var div = document.querySelector("div");
    div.innerHTML = html;
    

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    
    <body>
    
    </body>
    
    </html>
    <script src="../../template-web.js"></script>
    <script type="text/html" id="tpl">
        <ul>
            <li>
                <h1>{{title}}</h1>
            </li>
            {{each nav}}
            <li>{{$value}}-{{$index}}</li>
            {{/each}}
        </ul>
    </script>
    <script>
        var obj = {
            title: '岗位',
            nav: ['大前端', 'java', '大数据', 'python', 'UI设计', '产品经理']
        }
        let content = template('tpl', obj)
        document.body.innerHTML = content
    </script>
    


    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    
    <body>
    
    </body>
    
    </html>
    <script src="../../template-web.js"></script>
    <script type="text/html" id="tpl">
        <ul>
            <li>
                <h1>{{title}}</h1>
            </li>
            {{each nav v}}
            	<li>{{v}}</li>
            {{/each}}
        </ul>
    </script>
    <script>
        var obj = {
            title: '岗位',
            nav: ['大前端', 'java', '大数据', 'python', 'UI设计', '产品经理']
        }
        let content = template('tpl', obj)
        document.body.innerHTML = content
    </script>
    

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    
    <body>
    
    </body>
    
    </html>
    <script src="../../template-web.js"></script>
    <script type="text/html" id="tpl">
        <ul>
            <li>
                <h1>{{title}}</h1>
            </li>
            {{each nav v i}}
            	<li>{{v}}-{{i}}</li>
            	<!-- <li>{{nav[i]}}-{{i}}</li> -->
            {{/each}}
        </ul>
    </script>
    <script>
        var obj = {
            title: '岗位',
            nav: ['大前端', 'java', '大数据', 'python', 'UI设计', '产品经理']
        }
        let content = template('tpl', obj)
        document.body.innerHTML = content
    </script>
    

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <meta http-equiv="X-UA-Compatible" content="ie=edge">
       <title>Document</title>
       <link rel="stylesheet" href="../../bootstrap.css">
    </head>
    
    <body>
       <button>获取数据</button>
       <table class="table">
           <!-- 动态渲染 -->
       </table>
    
       <!--2- 准备模版 -->
       <script type="text/html" id="tmp">
           {{ each list v i }}
           <tr>
               <td>{{ v.id }}</td>
               <td>{{ v.name }}</td>
               <td>{{ v.age }}</td>
               <td>{{ v.sex }}</td>
               <td>{{ v.tel }}</td>
               <td>{{ v.photo }}</td>
               <td>{{ v.nickname }}</td>
           </tr>
           {{ /each }}
       </script>
    
       <!-- $.ajax -->
       <script src="../../jquery-1.12.4.min.js"></script>
       <!--1- template() -->
       <script src="../../template-web.js"></script>
       <script>
           //点击按钮,获取后台的数据,使用模版引擎,渲染在页面
           $('button').click(function() {
               $.ajax({
                   url: './stu.php',
                   dataType: 'json',
                   success: function(info) {
                       // console.log(info); // info是数组 
                       // 渲染
                       // 3-准备数据, 给模版的数据必须是对象{},info数组,要包装
                       var obj = {
                           list: info
                       };
                       var str = template('tmp', obj); // 把数据和模版进行绑定
                       // var str = template('tmp', {
                       //     list: info
                       // }); // 直接这样写更好,少一步
                       $('table').html(str); // 渲染
                   }
               })
           })
       </script>
    </body>
    
    </html>
    

  • 相关阅读:
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    HTML标签分类
    HTML属性与事件的搭配使用
    HTML全局属性和全局事件属性
  • 原文地址:https://www.cnblogs.com/jianjie/p/12383785.html
Copyright © 2011-2022 走看看