Vue模板解析
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模板解析的更多相关文章
- Vue模板内容
前面的话 如果只使用Vue最基础的声明式渲染的功能,则完全可以把Vue当做一个模板引擎来使用.本文将详细介绍Vue模板内容 概述 Vue.js使用了基于HTML的模板语法,允许声明式地将DOM绑定至底 ...
- Vue2.0原理-模板解析
下面这段代码,vue内部做了什么操作?我去源码里面找找看 new Vue({ el: '#app' }) 入口 vue 的入口文件在 src/core/instance/index.js, 里面一进来 ...
- webpack4.x加vue模板文件简单还原vue-cli
1.首先 npm init -y 创建一个项目 2.安装vue npm install vue --save 3.然后安装webpack 注意如果全局没有还要安装全局的webpack和webpack- ...
- Vue基础系列(三)——Vue模板中的数据绑定语法
写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...
- [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST
本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...
- [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串
本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...
- Vue 模板语法 && 数据绑定
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
- 初始Vue、Vue模板语法、数据绑定(2022/7/3)
文章目录 1.Vue简介 1.1.Vue的安装使用 1.2.实际的运用案例 1.3.vue开发工具的使用(这个需要在浏览器中安装) 2.初始Vue 2.1 .基础知识 2.1 .代码实例 2.2 .页 ...
- vert.x学习(四),使用模板解析器ClassLoaderTemplateResolver
在vert.x中使用模板解析,可以为我们带来很多方便.我这里学习了一下ClassLoaderTemplateResolver的简单使用.这次工程配置与上篇一样,不需要做任何多的配置.直接编写代码就可以 ...
随机推荐
- 想要白嫖ppt?记住这几个网站就够了
良心ppt,超赞! [PPT]:OfficePlushttps://www.officeplus.cn/Template/Home.shtml稻壳Docerhttps://www.docer.com/ ...
- 接口测试实战| GET/POST 请求区别详解
1.请求行的 method 不同:2.POST 可以附加 body,可以支持 form.json.xml.binary等各种数据格式:3.从行业通用规范的角度来说,无状态变化的建议使用 GET 请求, ...
- 【microPython与esp8266】之一——呼吸灯与PWM
呼吸灯与pwm pwm是什么? PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 简而言之,使 ...
- 用户与安全 -(1)Linux用户及组管理
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...
- 利用expect批量修改Linux服务器密码
一个执着于技术的公众号 背景 修改Linux系统密码,执行passwd即可更改密码.可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下.因此采用批量修 ...
- DOM操作标签,事件绑定,jQuery框架
DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' 基本使用 动态创建一个标签 var 变 ...
- java并发编程-StampedLock高性能读写锁
目录 一.读写锁 二.悲观读锁 三.乐观读 欢迎关注我的博客,更多精品知识合集 一.读写锁 在我的<java并发编程>上一篇文章中为大家介绍了<ReentrantLock读写锁> ...
- git clone指定分支
技术背景 Git是代码版本最常用的管理工具,此前也写过一篇介绍Git的基本使用的博客,而本文介绍一个可能在特定场景下能够用到的功能--直接拉取指定分支的内容. Git Clone 首先看一下如果我们按 ...
- @ConfigurationProperties(prefix = "server-options") 抛出 SpringBoot Configuration Annotation Processor not configured 错误
说明 spring-boot-configuration-processor 包的作用是自动生成 META-INF/spring-configuration-metadata.json 文件,而这个 ...
- 【Tools】JAR怀旧模拟器推荐
前段时间突然很怀念小时候玩的仙剑奇侠传,于是在网上各种找,功夫不负有心人,让我找到并且通关了.相信也有人需要.下面是截图. 下载地址:https://www.lanzous.com/ialmayh