| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue模版编译流程 -> 正文阅读 |
|
[JavaScript知识库]vue模版编译流程 |
vue中的模板编译的步骤:将template模板转化成ast语法树(拼接字符串),然后通过new Function + with语法,将ast语法树包装成Render函数,然后生成虚拟节点,然后将虚拟节点挂载到dom树上,生成真实DOM.
解析开始节点,先匹配到tagName,然后再去循环匹配取的属性的值,然后组装成一个节点
(1代表dom节点,3代表文本节点)
(2)接下来匹配的还是开始标签 (3)接下来匹配的是一段文本,文字就很简单了,用正则匹配到第一个‘<’也就是下一个dom节点的位置),把匹配后取得的字符串去空格处理后,生成一个下面的文本节点就OK啦,然后截取点已经匹配过的字符串,拿剩下的字符串继续进行匹配,直到传入的字符串全部被匹配一遍
等到传入的字符串全部匹配结束以后,会形成一个js描述的节点之间相互关系的dom树
如图所示
特别注意的是对于行内样式的处理,要把行内样式的值拼成key-value的形式
然后借助new Function + with就可以把拼接好的字符串转换成render函数了
是
否
是
否
否
是
是
否
否
是
否
是
传入el属性
判断是否有render方法
渲染render方法
判断是否有template
渲染template
渲染el里面的内容
判断字符串里是否以箭头开头
使用正则进行匹配
用正则匹配是否是开始标签
用正则分别取出来标签名和属性
将开始标签压入栈内
把已经匹配过的字段截掉重新进行匹配
用正则匹配是否是结束标签
说明是以文本开头然后
从栈里取出来最上面的标签名,形成闭合的节点
添加一个dom节点
添加一个文字节点
生成用js描述dom节点的ast语法树
拼接包装成字符串
通过new Function + with语法生成render函数
(以上是自己学习过程中整理,有错误或者不严谨的地方欢迎指正) |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:00:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |