Ajax -模板引擎方法 -循环、分支、原生语法、实例

模板引擎 - 循环

<!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>
    <script src="./libs/template-web.js"></script>
  </head>
  <body>
    <ul></ul>
    <!-- 添加模板 -->
    <!-- 在模板中可以使用你所传入的数据对象的属性,它会根据属性找到对应的值来使用 -->
    <!-- $index,当前数据的索引
         $value:当前数据 -->
    <script type="text/template" id="heroTemp">
      {{each data}}
        <li>
          <span>{{$index+1}}</span>---
          <span>{{$value.cname}}</span>---
          <span>{{$value.skin_name}}</span>
        </li>
      {{/each}}
    </script>
    <script>
      let list = {
        data: [
          {
            id: 14,
            cname: '孙膑',
            skin_name: '逆流之时|未来旅行|天使之翼|妖精王'
          },
          {
            id: 15,
            cname: '扁鹊',
            skin_name: '善恶怪医|救世之瞳|化身博士|炼金王'
          },
          { id: 16, cname: '白起', skin_name: '最终兵器|白色死神|狰|星夜王子' },
          {
            id: 17,
            cname: '芈月',
            skin_name: '永恒之月|红桃皇后|大秦宣太后|重明'
          }
        ]
      }

      let html = template('heroTemp', list)
      console.log(html)
      document.querySelector('ul').innerHTML = html
    </script>
  </body>
</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>
    <script src="./libs/template-web.js"></script>
  </head>
  <body>
    <ul></ul>
    <!-- 添加模板 -->
    <!-- 在模板中可以使用你所传入的数据对象的属性,它会根据属性找到对应的值来使用 -->
    <!-- $index,当前数据的索引
         $value:当前数据 -->
    <script type="text/template" id="heroTemp">
      {{each data v i}}
        <li>
          <span>{{i+1}}</span>---
          <span>{{v.cname}}</span>---
          <span>{{v.skin_name}}</span>
        </li>
      {{/each}}
    </script>
    <script>
      let list = {
        data: [
          {
            id: 14,
            cname: '孙膑',
            skin_name: '逆流之时|未来旅行|天使之翼|妖精王'
          },
          {
            id: 15,
            cname: '扁鹊',
            skin_name: '善恶怪医|救世之瞳|化身博士|炼金王'
          },
          { id: 16, cname: '白起', skin_name: '最终兵器|白色死神|狰|星夜王子' },
          {
            id: 17,
            cname: '芈月',
            skin_name: '永恒之月|红桃皇后|大秦宣太后|重明'
          }
        ]
      }

      let html = template('heroTemp', list)
      console.log(html)
      document.querySelector('ul').innerHTML = html
    </script>
  </body>
</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>
    <style type="text/css"></style>
    <!-- 1.引入模板引擎的资源文件,只要引入了这个文件就会在全局挂载一个template函数 -->
    <script src="./libs/template-web.js"></script>
  </head>
  <body>
    <ul></ul>

    <!-- 创建模板结构:我们只是需要参照这个结构,但是并不需要浏览器以html语法来解析这个结构 -->
    <!-- script标签有一个默认的type='text/javascript',它的作用就是告诉浏览器里面的内容是js代码,所以要以js语法进行解析 -->
    <!-- 在浏览器,有一个专门的type='text/template',就是用来描述模板结构的 -->
    <!-- 在模板中,可以使用你传入的数据对象的属性,模板内部会根据属性名称找到对应的值来使用 -->

    <!-- 你得指定在某个结构中你想显示的数据对象的属性名称 -->
    <!-- obj.obi.name -->
    <script type="text/template" id="textTemp">
      <li>{{name}}</li>
      <li>{{gender==1?'男':'女'}}</li>
      {{if gender == 1}}
      <li></li>
      {{else if gender == 0}}
      <li></li>
      {{else}}
      <li>未知</li>
      {{/if}}
      <li>{{age}}</li>
    </script>

    <script type="text/template" id="listTemp">
      {{each list}}
        <span>{{$value.name}}</span> ---
        {{if ($value.gender === 1)}}
        <span></span> ----
        {{else if $value.gender ===0}}
        <span></span> ----
        {{else}}
        <span>未知</span> ----
        {{/if}}
        <span>{{$value.age}}</span> <br>
      {{/each}}
    </script>
    <script>
      let obj = {
        list: [
          {
            name: 'jack',
            gender: 1,
            age: 20
          },
          {
            name: 'rose',
            gender: 0,
            age: 19
          },
          {
            name: 'tom',
            gender: 2,
            age: 18
          }
        ]
      }

      // 2.调用模板引擎的方法,传入模板id和数据,返回生成动态结构
      // template(模板id,数据对象)
      // let html = template('textTemp', obj)
      let html = template('listTemp', obj)
      console.log(html)

      document.querySelector('ul').innerHTML = html
    </script>
  </body>
</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>
    <script src="./libs/template-web.js"></script>
    <style>
      div {
        width: 400px;
        height: 400px;
        border: solid;
      }
    </style>
  </head>
  <body>
    <div></div>
    <script type="text/template" id="comTemp">
      <p>{{content}}</p>
      <p>{{@content}}</p>
      <p>{{#content}}</p>
    </script>

    <script>
      let obj = {
        content: '<h2>我是h2</h2><hr>'
      }

      let html = template('comTemp', obj)
      console.log(html)

      document.querySelector('div').innerHTML = html
    </script>
  </body>
</html>

模板的原生语法

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>我们的68</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css" />
    <style>
      .panel {
        width: 900px;
        margin: 10px auto;
      }

      .table img {
        width: 40px;
        height: 40px;
      }
    </style>
  </head>

  <body>
    <div class="container">
      <div class="panel panel-primary">
        <!-- Default panel contents -->
        <div class="panel-heading">英雄列表管理</div>
        <div class="panel-body">
          <!-- 存放的搜索区域 -->
          <div class="row">
            <div class="col-lg-6">
              <div class="input-group">
                <input
                  type="text"
                  id="hname"
                  class="form-control"
                  placeholder="输入英雄信息..."
                  autocomplete="true"
                />
                <span class="input-group-btn">
                  <button class="btn btn-default" id="btn_search" type="button">
                    搜索
                  </button>
                </span>
              </div>
              <!-- /input-group -->
            </div>
            <!-- /.col-lg-6 -->

            <div class="col-lg-3 col-lg-offset-3">
              <!-- 添加英雄的按钮 -->
              <!-- data-toggle="modal":说明控制显示隐藏的元素是toggle效果 -->
              <!-- data-target:控制的模态框是#myModal -->
              <!-- 属性的方式只能简单的弹出模态框,不能进行其它的业务处理 -->
              <button type="button" class="btn btn-success openDialog">
                添加英雄
              </button>
            </div>
          </div>
        </div>

        <!-- Table -->
        <table class="table">
          <thead>
            <tr>
              <th>编号</th>
              <th>英雄名称</th>
              <th>英雄性别</th>
              <th>头像</th>
              <th>操作区</th>
            </tr>
          </thead>
          <!-- 表格主体 -->
          <tbody id="tbody">
            <tr>
              <td>1</td>
              <td>a</td>
              <td>b</td>
              <td>
                <img src="" alt="" />
              </td>
              <td>
                <button type="button" class="btn btn-danger">删除</button>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>

    <script src="./libs/jquery/jquery.min.js"></script>
    <script src="./libs/bootstrap/js/bootstrap.min.js"></script>
    <script src="./libs/template-web.js"></script>
    <!-- 添加英雄列表的模板结构 -->
    <script type="text/template" id="heroListTemp">
      <% for(let i=0; i< data.length;i++){ %>
        <tr>
            <td><%= i+1 %></td>
            <td><%= data[i].name %></td>
            <% if(data[i].gender==='男'){ %>
            <td></td>
            <% } else { %>
            <td></td>
            <%}%>
            <td>
              <img src="<%= data[i].img %>" alt="" />
            </td>
            <td>
              <button type="button" class="btn btn-danger">删除</button>
            </td>
          </tr>
      <% } %>
    </script>

    <script>
      // 查阅接口文档 》 发起ajax请求  >> 分析数据 >> 创建模板  》》 调用模板引擎生成动态结构 >> 填充到指定的位置
      $(function() {
        // 页面加载,发起ajax请求,获取所有英雄数据,使用模板引擎的方式进行动态渲染
        $.ajax({
          url: 'http://127.0.0.1:3001/getHeroList',
          success: function(res) {
            console.log(res)

            // 调用模板引擎生成动态结构
            let html = template('heroListTemp', res)
            // 填充到指定的位置
            $('#tbody').html(html)
          },
          dataType: 'json'
        })
      })
    </script>
  </body>
</html>

使用模板引擎渲染数据

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>我们的68</title>
    <link rel="stylesheet" href="./libs/bootstrap/css/bootstrap.min.css" />
    <style>
      .panel {
        width: 900px;
        margin: 10px auto;
      }

      .table img {
        width: 40px;
        height: 40px;
      }
    </style>
  </head>

  <body>
    <div class="container">
      <div class="panel panel-primary">
        <!-- Default panel contents -->
        <div class="panel-heading">英雄列表管理</div>
        <div class="panel-body">
          <!-- 存放的搜索区域 -->
          <div class="row">
            <div class="col-lg-6">
              <div class="input-group">
                <input
                  type="text"
                  id="hname"
                  class="form-control"
                  placeholder="输入英雄信息..."
                  autocomplete="true"
                />
                <span class="input-group-btn">
                  <button class="btn btn-default" id="btn_search" type="button">
                    搜索
                  </button>
                </span>
              </div>
              <!-- /input-group -->
            </div>
            <!-- /.col-lg-6 -->

            <div class="col-lg-3 col-lg-offset-3">
              <!-- 添加英雄的按钮 -->
              <!-- data-toggle="modal":说明控制显示隐藏的元素是toggle效果 -->
              <!-- data-target:控制的模态框是#myModal -->
              <!-- 属性的方式只能简单的弹出模态框,不能进行其它的业务处理 -->
              <button type="button" class="btn btn-success openDialog">
                添加英雄
              </button>
            </div>
          </div>
        </div>

        <!-- Table -->
        <table class="table">
          <thead>
            <tr>
              <th>编号</th>
              <th>英雄名称</th>
              <th>英雄性别</th>
              <th>头像</th>
              <th>操作区</th>
            </tr>
          </thead>
          <!-- 表格主体 -->
          <tbody id="tbody"></tbody>
        </table>
      </div>
    </div>

    <script src="./libs/jquery/jquery.min.js"></script>
    <script src="./libs/bootstrap/js/bootstrap.min.js"></script>
    <script src="./libs/template-web.js"></script>
    <!-- 添加英雄列表的模板结构 -->
    <script type="text/template" id="heroListTemp">
      {{each data}}
        <tr>
          <td>{{$index + 1}}</td>
          <td>{{$value.name}}</td>
          <td>{{$value.gender}}</td>
          <td>
            <img src="{{$value.img}}" alt="" />
          </td>
          <td>
            <button type="button" class="btn btn-danger">删除</button>
          </td>
        </tr>
      {{/each}}
    </script>

    <script>
      // 查阅接口文档 》 发起ajax请求  >> 分析数据 >> 创建模板  》》 调用模板引擎生成动态结构 >> 填充到指定的位置
      $(function() {
        // 页面加载,发起ajax请求,获取所有英雄数据,使用模板引擎的方式进行动态渲染
        $.ajax({
          url: 'http://127.0.0.1:3001/getHeroList',
          success: function(res) {
            // 调用模板引擎生成动态结构
            let html = template('heroListTemp', res)
            // 填充到指定的位置
            $('#tbody').html(html)
          },
          dataType: 'json'
        })
      })
    </script>
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_ww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值