小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

LayUI模板引擎渲染数据

前端开发,layui,前端 额外说明

收录于:17天前

前端模板引擎介绍

接上节Spring Boot项目开发实践-(LayUI实现前后端数据交换并定义渲染数据的方法)

模板引擎可以简化开发,大大提高效率。小编之前用过JSP和Thymeleaf,还有python的jinja2。这些是后端模板引擎。数据的渲染需要服务器帮助重新解析html,在特定的标识符处重新解析html。填写数据。

Node第一次将JavaScript带入后端服务器开发,js也成为了后端家族的一员。前端模板基于js,模板基于js解析器,让逻辑和数据的关系更加清晰。

模板引擎文档-layui.laytpl

在这里插入图片描述

占位符只起到填充数据的作用,关键是模板的作用:

如果模板的默认 { { }} 分隔符与其他模板(通常是服务器端模板)冲突,您还可以重新定义分隔符。

laytpl.config({
    
  open: '<%',
  close: '%>'
});

使用模板引擎需要用script标签包裹起来,并为script标签添加id="demo" type="text/html"属性声明该段需要为模板语法。

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

使用脚本包装有两个含义:

  1. 用script标签包裹的HTML可以使用js语法,类似于java jsp中用<%-----%>包裹的部分,可以使用java代码;
  2. 对包裹的部分进行别名,得到静态html;
  3. 声明脚本内部有模板语法需要特殊的解析。

使用步骤

  • 导入模板引擎模块
 layui.use(['layer','laytpl'], function () {
    
         layer = layui.layer,
         laytpl = layui.laytpl;
});
  • 编写重新分析页面和显示区域
<script id="demo" type="text/html">
	<div>{
    {
    d.title}}</div>
</script>
<div id="sentence"></div>

注意这里容易忽视,首先用<script>标签包裹的为冲解析页面,前端模板引擎比后端模板引擎解析复杂一些,原因在于js既是浏览器解析语言又是后端解析语言,所以需要区分,这里layui的实现方案使主动获取需要解析的部分传入模板引擎,回调函数得到页面文件。

简单来说,后端引擎可以直接识别占位模板语法,而js则需要标记模板语法,并将解析后的模板传入模板引擎才能得到最终的页面,所以这个过程也是一个异步任务。

因此上面需要定义两个模板,一个是要解析的模板,一个是最终显示的模板。

  • 获取传入的值用模板解析并返回最终页面
layui.use(['layer','jquery','laytpl'], function () {
    
    var $ = layui.$,   //jQuery复制
        layer = layui.layer,
        laytpl = layui.laytpl;
		//定义数据
		var data = {
    "title":"layui模板引擎的测试!"}
		
		//获取待解析模板
		let tpl = demo.innerHTML
		//获取显示区域
		let view = document.getElementById("sentence")
		//将带解析模板和数据传入laytpl模板引擎,返回最终页面html
		laytpl(tpl).render(data,function(html){
    
		//将返回的html通过DOM操作赋值给显示区域
		view.innerHTML = html
	})
});

核心部分:

//定义数据(数据可以后端获取)
var data = {
    "title":"layui模板引擎的测试!"}

//获取待解析模板
let tpl = demo.innerHTML
//获取显示区域
let view = document.getElementById("sentence")
//将带解析模板和数据传入laytpl模板引擎,返回最终页面html
laytpl(tpl).render(data,function(html){
    
//将返回的html通过DOM操作赋值给显示区域
view.innerHTML = html

在这里插入图片描述
到此已经可以渲染数据了,另外需要注意的有一下几点:

  1. <div>{ {d.title}}</div>占位符中的d全局未定义却可以使用,因为这是固定写法,所有模板处传入的data都会直接赋值给d。例如:
//对象定义
var data = {
    "title":"layui模板引擎的测试!"}

//数组定义
var data = [1,2,3,4,5]

在这里插入图片描述
在这里插入图片描述

  1. 待解析模板可以为空,显示模板必须存在。

带解析模板为空只会什么也不显示,但是模板为空或不存在会报错。
在这里插入图片描述
3. script标签包裹的html不会显示其本身内容,也不影响布局,起css样式会在最终显示模板展现。

模板使用最多的应该是循环渲染数据和分支,layui模板的循环使用layui.each方法,分支为if

layui 模板分支和循环

后端接收数据并使用模板填充数据

场景介绍:js想通过DOM向html添加数据,但是当数据很多的时候,DOM操作比较麻烦。对于某些数据来说,结构是一致的,可以发现动态赋值有规律,如下所示:

在这里插入图片描述
每一行都包含一个字符串和时间。

<!--原始数据-->
 <div class="layuimini-notice">
     <div class="layuimini-notice-title" id="title">_xiao_</div>
     <div class="layuimini-notice-extra">2019-07-11 12:57</div>
 </div>
 <div class="layuimini-notice">
     <div class="layuimini-notice-title">_xiao_</div>
     <div class="layuimini-notice-extra">2019-07-11 12:57</div>
 </div>
 <div class="layuimini-notice">
     <div class="layuimini-notice-title">_xiao_</div>
     <div class="layuimini-notice-extra">2019-07-05 14:28</div>
 </div>
 <div class="layuimini-notice">
     <div class="layuimini-notice-title">_xiao_</div>
     <div class="layuimini-notice-extra">2019-07-04 11:02</div>
 </div>
 <div class="layuimini-notice">
     <div class="layuimini-notice-title">_xiao_</div>
     <div class="layuimini-notice-extra">2019-07-05 14:28</div>
 </div> 

获取后台数据:

//定义ajax获取后台数据
function newsData(){
    $.ajax({
        type: "GET",
        url: "http://localhost:8080/product/newRecord",
        data: null,
        dataType: "json",
        success: function (data) {
            console.log(data)
            //updateSaleData(data)
        }
    });
}

//定义前端模板重解析方法
//最近消费记录
function getTpl(data){
    let tpl = demo.innerHTML
    let view = document.getElementById("sentence")
    laytpl(tpl).render(data,function(html){
    view.innerHTML = html
    })
}

由于ajax和模板引擎都是异步任务,我们不知道谁先执行,只能通过调用来使用。

回显数据
在这里插入图片描述
根据回显的数据构造显示模板:
在这里插入图片描述

<script id="news" type="text/html">
    {
    {
    #  layui.each(d, function(index, item){
     }}
    <div class="layuimini-notice">
        <div class="layuimini-notice-title" id="title">{
    {
    item.sentence}}</div>
        <div class="layuimini-notice-extra">{
    {
     item.time }}</div>
    </div>
    {
    {
    #  }); }}
</script> 
<div id="view"></div> 

在这里插入图片描述

模板引擎完整小案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!--引入 layui.css -->
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/layui/2.4.5/css/layui.min.css">
		 
		<!-- 引入 layui.js -->
		<script src="https://cdnjs.cloudflare.com/ajax/libs/layui/2.4.5/layui.js"></script>
		<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
	</head>
	<body>
		<script id="demo" type="text/html"> <div>{
      {
      d[0]}}</div> </script>
		<div id="sentence"></div>
	</body>
	<script> layui.use(['layer','jquery','laytpl'], function () {
       var $ = layui.$, //jQuery复制 layer = layui.layer, laytpl = layui.laytpl; //var data = {"title":"layui模板引擎的测试!"} var data = [1,2,3,4,5] let tpl = demo.innerHTML let view = document.getElementById("sentence") laytpl(tpl).render(data,function(html){
       view.innerHTML = html }) }); </script>
</html>

喜欢就关注吧!
. . .

相关推荐

额外说明

Mybatis常用jdbcType数据类型

MyBatis 通过包含的jdbcType类型 BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINED TINYINT     REAL       VARC

额外说明

深度解析:面试官问你项目经验到底能问多细?(附实战项目)

马上年关了,很多准备拿完年终跑路的小伙伴们可以看过来啦,为年后跳槽做点准备;暂时不准备挪窝的也可以来看看,有备无患嘛 面试难点 其实面试同一个岗位的话,大家的基础知识技能都差不多,面试官一般都是通过你简历上过往的项目经验来甄别你跟他们公司的适配性,所以经

额外说明

力扣:第 317 场周赛

这是第一次参加力扣的周赛,四道题,题目分别如下: 1.可被三整除的偶数的平均值 2.最流行的视频创作者 3.美丽整数的最小增量 4.移除子树后的二叉树高度 分别对应3、4、5、6分 1.当时第一题用了4:52,罚时一次,因为没有考虑到除零异常。 题目如下

额外说明

【Python零基础到入门】Python基础语法篇——Python 常用基础语法 速览

目录 - 前言 -Python 常用基础语法 速览 -️‍-编码 -️‍-标识符 -️‍-python保留字 -️‍-注释 -️‍-行与缩进 -️‍-多行语句 -️‍-数字(Number)类型 -️‍-字符串(String) -️‍-空行 -️‍-等待用

额外说明

数据结构——红黑树

红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它确保在插入和删除等基本操作后,树保持平衡,从而提供了快速的查找、插入和删除操作。红黑树之所以称为"红黑树",是因为每个节点都具有一个颜色属性,可以是红色或黑色,它们必须满足一些规则以保持树

额外说明

Vert.x - SpringBoot 整合 vertx

一、vertx 前面的文章讲解了 vertx 的简介及 vertx-web 的路由,看过的小伙伴应该对 vertx 有了一定的了解,从前面的演示来看,都是单独使用的 vertx ,对于目前的后端来说 SpringBoot 可是一个非常火热的框架,那如果将

额外说明

将MySQL数据库转为SQL脚本文件

文章目录 一、提出任务 二、完成任务 (一)利用命令将数据库导出为SQL脚本 (二)利用NaviCat将数据库导出为SQL脚本 1、下载NaviCat 2、授权为可执行文件 3、启动NaviCat 5、创建数据库连接 6、打开需要转储的数据库 7、转储为

额外说明

陈小玉:算法学习建议

算法学习建议 知识在于积累,学习需要耐力。学习就像挖金矿,或许一开始毫无头绪,但转个角度、换换工具,时间久了总会找到一个缝隙。成功就是你比别人多走了一段路,或许恰恰是那么一小步。 第一个建议:多角度,对比学习。 学习算法,可以先阅读一本简单的入门书,然后

额外说明

Spring概述、Spring的优势和体系结构

Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核

额外说明

Windows系统缺少Wpc.dll文件出现错误提示问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Wpc.dll文件(挑选合适

ads via 小工具