mustcache

什么是模板引擎

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

数据

[
{"name":"小明","age":12,"sex":"男"},
{"name":"小红","age":11,"sex":"女"},
{"name":"小强","age":13,"sex":"男"}
]

视图

<ul>
<li>
<div class = "hd">小明的基本信息</div>
<div class= "bd">
<p>姓名:小明</p>
<p>年龄:12</p>
<p>性别:男</p>
</div>
</li>
<li>
<div class = "hd">小红的基本信息</div>
<div class= "bd">
<p>姓名:小红</p>
<p>年龄:11</p>
<p>性别:男</p>
</div>
</li>
</ul>

如何将数据转变为视图

曾出现过的数据转变为视图的方法

  • 纯DOM法 ---> 非常笨拙没有实战价值
  • 数据join法 ---> 曾几何时非常流行,是曾经的前端必会知识
  • ES6的反引号法 ---> ES6 中新增的/${a} 语法糖,很好用
  • 模板引擎 ----> 解决数据转变为视图的最优雅的方法

纯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>模板引擎-纯dom</title>
</head> <body>
<ul id="list"> </ul> <script>
var arr = [
{ "name": "小明", "age": 12, "sex": "男" },
{ "name": "小红", "age": 12, "sex": "女" },
{ "name": "小强", "age": 11, "sex": "男" }
];
var list = document.getElementById('list');
for (var i = 0; i < arr.length; i++) {
//每遍历一项。都要用DOM方法创建li标签
let oLi = document.createElement('li'); // 创建hd这个div
let hdDiv = document.createElement('li');
hdDiv.className = 'hd';
hdDiv.innerText = arr[i].name + '的基本信息'; oLi.appendChild(hdDiv);
// 创建bd这个div
let bdDiv = document.createElement('div');
bdDiv.className = 'bd';
// 创建3个p
let p1 = document.createElement('p');
p1.innerText = '姓名:' + arr[i].name;
bdDiv.appendChild(p1);
let p2 = document.createElement('p');
p2.innerText = '年龄:' + arr[i].age;
bdDiv.appendChild(p2);
let p3 = document.createElement('p');
p3.innerText = '性别:' + arr[i].sex;
bdDiv.appendChild(p3);
oLi.appendChild(bdDiv) //创建的节点是孤儿节点,所以必须上树才能被用户看见
list.appendChild(oLi);
} </script> </body> </html>

数组join法

简单演示

<body>

</body>
<script>
var str1 = ['a',
'b',
'c',
'd',].join('');
var str2 = [
'<li>',
' <div class = "hd">小明的基本信息</div>',
' <div class= "bd">',
' <p>姓名:小明</p>',
' <p>年龄:12</p>',
' <p>性别:男</p>',
' </div>',
'/li>',
].join('')
console.log(str1,str2)
</script> </html>

将数据转化为视图代码

<body>

    <ul id="list">

    </ul>
</body>
<script>
var arr = [
{ "name": "小明", "age": 12, "sex": "男" },
{ "name": "小红", "age": 12, "sex": "女" },
{ "name": "小强", "age": 11, "sex": "男" }
];
// 遍历arr 数组,每遍历一项,就以字符串的视角
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('') }
</script> </html>

虚拟DOM与diff算法

什么是虚拟DOM与Diff 算法

snabbdom--->snabbdom 的h函数是何如工作的--->diff 算法--->手写diff算法

snabbdom是瑞典语单词,单词原意"速度"

snabbdom 是著名的DOM库,是diff算法的鼻祖,Vue 源码借鉴了snabbdom

git:

snabbdom是DOM库,当然不能在nodejs环境运行,所以我们需要搭建webpack和webpack-dev-server开发环境

Vue模板解析的更多相关文章

  1. Vue模板内容

    前面的话 如果只使用Vue最基础的声明式渲染的功能,则完全可以把Vue当做一个模板引擎来使用.本文将详细介绍Vue模板内容 概述 Vue.js使用了基于HTML的模板语法,允许声明式地将DOM绑定至底 ...

  2. Vue2.0原理-模板解析

    下面这段代码,vue内部做了什么操作?我去源码里面找找看 new Vue({ el: '#app' }) 入口 vue 的入口文件在 src/core/instance/index.js, 里面一进来 ...

  3. webpack4.x加vue模板文件简单还原vue-cli

    1.首先 npm init -y 创建一个项目 2.安装vue npm install vue --save 3.然后安装webpack 注意如果全局没有还要安装全局的webpack和webpack- ...

  4. Vue基础系列(三)——Vue模板中的数据绑定语法

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  5. [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST

    本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...

  6. [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串

    本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...

  7. Vue 模板语法 && 数据绑定

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...

  8. 初始Vue、Vue模板语法、数据绑定(2022/7/3)

    文章目录 1.Vue简介 1.1.Vue的安装使用 1.2.实际的运用案例 1.3.vue开发工具的使用(这个需要在浏览器中安装) 2.初始Vue 2.1 .基础知识 2.1 .代码实例 2.2 .页 ...

  9. vert.x学习(四),使用模板解析器ClassLoaderTemplateResolver

    在vert.x中使用模板解析,可以为我们带来很多方便.我这里学习了一下ClassLoaderTemplateResolver的简单使用.这次工程配置与上篇一样,不需要做任何多的配置.直接编写代码就可以 ...

随机推荐

  1. Python schedule 库定时任务

    Python schedule 库定时任务 schedule的使用 # 用于scrapy定时任务设置 import schedule import time def job(): print(&quo ...

  2. 技术分享 | Web自动化之Selenium安装

    Web 应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作.但是手工执行的任务容易出现人为的错误,也比较费时间.因此,将这些任务自动化,就可以消除人为因素.S ...

  3. 使用allatori混淆代码

    引言 为了保密需要,我们开发出来的程序在实际部署之前,需要先将jar包的代码进行混淆,让用户使用反编译也无法获得源码. allatori就是这样一个混淆java jar包代码的工具. 操作步骤 Ste ...

  4. 公众号走走看看——js

    1.数字转换字符串/字符串转换数字 2.短循环 3.性能测试(执行时间) 4.交换值 5.合并数组(IE不兼容) 6.数组去重 7.判断给定参数是否是数字 8.获取最大最小值.取随机数(arr.len ...

  5. dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露

    本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用 ...

  6. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  7. Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用

    前几篇文章中,我们分别实现通过azure来部署.NET和Springboot的应用,今天我们来研究一下如何部署一套Go的Web应用上去. 文章配套视频专栏: https://space.bilibil ...

  8. .net 项目使用 JSON Schema

    .net 项目使用 JSON Schema 最近公司要做配置项的改造,要把appsettings.json的内容放到数据库,经过分析还是用json的方式存储最为方便,项目改动性最小,这就牵扯到一个问题 ...

  9. 一个NIH综合症患者的自白

    一个NIH综合症患者的自白 欢迎关注我的博客,️点他即可. NIH: Not Invented Here 当人们看到一款产品或者任何涉及创意的东西时,常常会有一个想法--这是抄的.也就是说它并非原创, ...

  10. 项目:PMBok

    美国项目管理协会(PMI)资格认证之所以能在如此广的行业和地域范围内被迅速认可,首先是项目管理本身的重要性和实用性决定的,其次很大程度上是得益于该项认证体系本身的科学性.PMI早在七十年代末就率先提出 ...