mustache模板引擎

  • 1.什么是模板引擎
    • 数据变为视图的方法
      • 1.纯Dom法(非常笨拙,没有实战价值)
      • 2.数组join法(曾经非常流行)
      • 3.es6模板字符串法(ES6中新增的`${a}`语法糖,很好用)
      • 4.模板引擎(解决数据变为视图最优雅的方法)
  • 2.mustache基本使用
  • 3.mustache底层核心机理
  • 4.mustache手写实现

1.什么是模板引擎

模板引擎是将数据要变为视图最优雅的解决方案

数据变为视图的方法

1.纯Dom法(非常笨拙,没有实战价值)

实现代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul id="list"></ul><script>let arr = [{"name":'小明','age':12,'sex':'男'},{"name":'小红','age':11,'sex':'女'},{"name":'小强','age':13,'sex':'男'},]const list = document.querySelector('#list')for(let i = 0; i < arr.length; i++){// 每遍历一遍都要用Dom方法去创建li标签let lis = document.createElement('li')// 创建hd这个divlet hdDiv = document.createElement('div');hdDiv.className = 'hd'hdDiv.innerText =  arr[i].name + '的基本信息'// 创建bd这个divlet bdDiv = document.createElement('div');bdDiv.className = 'bd'// 创建三个p标签let p1 = document.createElement('p')p1.innerText = ' 姓名:'+ arr[i].namebdDiv.appendChild(p1)let p2 = document.createElement('p')p2.innerText = ' 年龄:'+ arr[i].agebdDiv.appendChild(p2)let p3 = document.createElement('p')p3.innerText = ' 性别:'+ arr[i].sexbdDiv.appendChild(p3)// 创建出来的是孤儿节点,上树后才能被看见lis.appendChild(hdDiv)lis.appendChild(bdDiv)list.appendChild(lis)}</script>
</body>
</html>

2.数组join法(曾经非常流行)

实现代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul id="list"></ul><script>let arr = [{"name":'小明','age':12,'sex':'男'},{"name":'小红','age':11,'sex':'女'},{"name":'小强','age':13,'sex':'男'},]const list = document.querySelector('#list')// 遍历arr数组,每遍历一项,就以字符串的视角将html字符串添加到list中for(let i = 0; i < arr.length; i++){list.innerHTML += [ '<li>','  <div class="hd">'+ arr[i].name +'的信息</div>','  <div class="bd">','    <p>姓名:'+arr[i].name+'</p>','    <p>年龄:'+arr[i].age+'</p>','    <p>性别: '+arr[i].sex+'</p>','  </div>','</li>'].join('')}// let str = [ // '<li>',// '  <div class="hd"></div>',// '  <div class="bd">',// '    <p>姓名:</p>',// '    <p>年龄:</p>',// '    <p>性别</p>',// '  </div>',// '</li>'// ].join('')console.log(str);</script></body>
</html>

3.es6模板字符串法(ES6中新增的${a}语法糖,很好用)

实现代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>模板字符串法</title>
</head>
<body><ul id="list"></ul><script>let arr = [{"name":'小明','age':12,'sex':'男'},{"name":'小红','age':11,'sex':'女'},{"name":'小强','age':13,'sex':'男'},]const list = document.querySelector('#list')// 遍历arr数组,每遍历一项,就以字符串的视角将html字符串添加到list中for(let i = 0; i < arr.length; i++){list.innerHTML +=  ` <li><div class="hd">${arr[i].name }的信息</div><div class="bd"><p>姓名:${arr[i].name }</p><p>年龄:${arr[i].age }</p><p>性别: ${arr[i].sex }</p></div></li>`}</script></body>
</html>

4.模板引擎(解决数据变为视图最优雅的方法)

2.mustache基本使用

  • mustache官方git: https://github.com/janl/mustache.js
  • mustache是"胡子"的意思,因为它的嵌入标记{{ }}非常像胡子
  • {{ }} 的语法也被Vue沿用
  • mustache是最早的模板引擎库,比Vue诞生早的多,它的底层实现机理在当时是非常有创造性、轰动性的,为后续模板引擎的发展提供了崭新的思路
  • 首先要引入mustache库(本文是4.0.1版本),可以在bootcdn.com上找到它
  • mustache的模板语法非常简单,比如前述案例的模板语法如下:

1.循环对象数组:

<ul>
{{#arr}}<li><div class="hd">{{name}}的信息</div><div class="bd"><p>姓名:{{name}}</p><p>年龄:{{age}}</p><p>性别: {{sex}}</p></div></li>{{/arr}}
</ul>

2.不循环:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="container"></div><script src="./jslib/mustache.js"></script><script>let templateStr = `<h1>我买了一个{{phone}}手机,心情:{{mood}}</h1>`let data = {phone:'华为',mood:'开心'}let domStr =  Mustache.render(templateStr,data)let container = document.querySelector('#container')container.innerHTML = domStrconsole.log(domStr);</script>
</body>
</html>

3.循环简单数组

4.数组嵌套

5.布尔值

注:不使用模板字符串

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="container"></div><script src="./jslib/mustache.js"></script><!-- 模板 --><script type="text/template" id="template"><ul>{{#arr}}<li><div class="hd">{{name}}的信息</div><div class="bd"><p>姓名:{{name}}</p><p>年龄:{{age}}</p><p>性别: {{sex}}</p></div></li>{{/arr}}</ul></script><script>let templateStr = document.getElementById('template').innerHTMLlet data = {arr:[{"name":'小明','age':12,'sex':'男'},{"name":'小红','age':11,'sex':'女'},{"name":'小强','age':13,'sex':'男'},]}let domStr =  Mustache.render(templateStr,data)let container = document.querySelector('#container')container.innerHTML = domStrconsole.log(domStr);</script></body>
</html>

3.mustache底层核心机理

1.mustache库不能用简单的正则表达式思路实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="container"></div><script src="./jslib/mustache.js"></script><script>let templateStr = `<h1>我买了一个{{phone}},我心情很{{mood}}</h1>`let data = {phone:'xxx',mood:'开心'}//  let domStr =  Mustache.render(templateStr,data)let domStr =  render(templateStr,data)let container = document.querySelector('#container')container.innerHTML = domStr//最简单的模板引擎的实现机理,利用的是正则表达式中的replace()方法。//replace()的第二个参数可以是一个函数,这个函数提供捕获的东西的参数,就是$1//结合data对象,即可进行智能的替换function render(templateStr,data){return templateStr.replace(/\{\{(\w+)\}\}/g,function(findStr,$1){return data[$1]})}// replace有四个参数// a参数//匹配的位置  {{xxx}}// b参数//捕获的// c参数//位置// d/源字符串</script></body>
</html>

3.mustache库实现机理

什么是tokens?

  • tokens是一个js的嵌套数组,就是模板字符串的JS表示
  • 它是 “抽象语法树”、“虚拟节点” 等等的开山鼻祖
    模板字符串: <h1>我买了一个{{thing}},好{{mood}}啊</h1>

tokens:

  [["text","<h1>我买了一个"],["name","thing"],["text",",好"],["name","mood"],["text","啊<h1>"],
]

4.mustache手写实现

xxx待更新

vue2.x---mustache模板引擎学习记录相关推荐

  1. 学习Vue的mustache语法-mustache模板引擎

    学习地址 : https://www.bilibili.com/video/BV1EV411h79m?vd_source=a81826692f4afea80764f4048dc1ae0a 代码地址 : ...

  2. 【Vue源码】mustache模板引擎 - 基本使用 - 底层原理 - 手写实现

    文章目录 1. 模板引擎的介绍 1.1 模板引擎是什么? 1.2 模板引擎是怎么来的?(发展历史) 1. 使用原生的DOM操作 2. 使用数组中的join方法 3. 使用ES6反引号的方法 2. mu ...

  3. Vue源码之mustache模板引擎(二) 手写实现mustache

    Vue源码之mustache模板引擎(二) 手写实现mustache mustache.js 个人练习结果仓库(持续更新):Vue源码解析 webpack配置 可以参考之前的笔记Webpack笔记 安 ...

  4. Vue源码之mustache模板引擎(一)

    Vue源码之mustache模板引擎(一) 个人练习结果仓库(持续更新):Vue源码解析 抽空把之前学的东西写成笔记. 学习视频链接:[尚硅谷]Vue源码解析之mustache模板引擎 模板引擎是什么 ...

  5. velocity(vm)模板引擎学习介绍及语法

    velocity模板引擎学习 velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,( ...

  6. Mustache 模板引擎

    Mustache 模板引擎 1.Mustache简介   mustache.js 是一个简单强大的 JavaScript 模板引擎.使用mustache前需要通过script标签引入它的js文件,然后 ...

  7. Vue深入学习1—mustache模板引擎原理

    mustache 是 "胡子"的意思,因为它的嵌入标记 {{ }} 旋转过来很像胡子,Vue中的 {{ }} 语法也引用了mustache,这也是我深入学习的目的. 1.原始js方 ...

  8. 【Vue源码解析】mustache模板引擎

    模板引擎 什么是模板引擎 实现 Scanner 类 根据模板字符串生成 tokens 在 index.js 引入 parseTemplateToTokens 实现 tokens 的嵌套 One Mor ...

  9. thymeleaf 获取yml中的值_Thymeleaf模板引擎学习

    开发传统Java WEB项目时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用JSP页面进行页面渲染了.从而Thymeleaf提供了一个用于整合Spring MVC的可选模 ...

最新文章

  1. 如何在GNOME中添加自己的菜单项
  2. 全球3D机器视觉技术引领者,银牛微电子强势登陆中国市场
  3. MRTG教程(二):MRTG配置文件的生成工具cfgmaker(上)
  4. oracle执行长任务,oracle 里面定时执行任务设置
  5. Android性能调优篇之探索垃圾回收机制
  6. new HashMap<String, Object>();
  7. 汪子熙的SAP技术文章分类合集
  8. SAP UI5 extend debug
  9. python消息队列celery_python—Celery异步分布式
  10. [原创]网站HTML,XHTML,XML,WML,CSS等测试验证工具介绍
  11. 安川机器人原点丢失_安川机器人原点及校准浅析
  12. android电视与苹果手机图片,小米电视怎么投屏?图文讲解安卓和苹果手机投屏到小米电视方法...
  13. 【BZOJ2563】阿狸和桃子的游戏 贪心
  14. JAVA使用 Shade 进行依赖冲突处理
  15. 使用 Python 脚本执行国密 sm2 加解密
  16. 忍者必须死3系统拆解+测评
  17. 概率图模型(PGM)综述-by MIT 林达华博士
  18. windows11+office2021安装教程
  19. webug4.0总结篇
  20. DHCP服务器是什么?

热门文章

  1. springboot项目打镜像推到私有仓库
  2. 今日头条成功的核心技术秘诀是什么?深度解密个性化资讯推荐技术
  3. 光伏并网逆变器资料,包含原理图,pcb,源码以及元器件明细表
  4. 计算机语言发展和分类
  5. 计算机考试中画图不能处理的格式,解决画图程序无法读取该文件。无效的位图文件或不支持文件的格式的方法...
  6. windows7 RC 体验(安装与汉化以及开发兼容性)
  7. Proteus中添加arduino元件库
  8. 【渐进交互学习网络:轻量级:超分:工业应用】
  9. 深入理解Python列表(list)
  10. 感恩前行 秀兰集团成立22周年庆典举办