Vue的编译过程

摘要:
将上图细化一下,也就是template编译的过程如下图所示:在深入一点,如下:有关于Vue中template的渲染的详细过程,可以阅读《Vue的模板》一文。简理的理解就是Vue中的template编译成浏览器可识的过程会经过不少的过程。用个小示例来举例:Vue将会通过其自身的编译机制,将编译成让浏览器可以识别的HTML代码。上面的示例通过newVue()创建一下人Vue的实例,并且将这个实例挂载到div#app的元素下,然后把组件编译成HTML,最终渲染所需要的UI效果。

Vue的编译过程第1张

碰到是否有template选项时,会询问是否要对template进行编译:

Vue的编译过程第2张

template编译(渲染成UI)有一个过程。模板通过编译生成AST,再由AST生成Vue的渲染函数,渲染函数结合数据生成Virtual DOM树,对Virtual DOM进行diffpatch后生成新的UI。将上图细化一下,也就是template编译的过程如下图所示:

Vue的编译过程第3张

在深入一点,如下:

Vue的编译过程第4张

有关于Vue中template的渲染的详细过程,可以阅读《Vue的模板》一文。

简理的理解就是Vue中的template编译成浏览器可识的过程会经过不少的过程。言外之意,最终在浏览器中呈现的并不是<template>,而是会解析成标准的HTML,然后将组件的标签替换为对应的HTML片段。用个小示例来举例:

Vue将会通过其自身的编译机制(如前图所示的过程),将<my-component>编译成让浏览器可以识别的HTML代码。可以借助浏览器开发者工具一探究竟:

Vue的编译过程第5张

我的理解是这样的。上面的示例通过new Vue()创建一下人Vue的实例,并且将这个实例挂载到div#app的元素下,然后把组件<my-component>编译成HTML,最终渲染所需要的UI效果。继续用张图来描述这个过程,一图胜过千言万语嘛。

Vue的编译过程第6张

我们要说的是模板编译的作用域,在Vue中,组件是有一个作用域的:组件模板(<template>内的就是组件作用域,而其之外的就不是组件的作用域了,比如上面的示例,my-component组件的作用域就是下面这部分:

通俗地讲,在子组件中定义的数据,只能用在子组件的模板。在父组件中定义的数据,只能用在父组件的模板。如果父组件的数据要在子组件中使用,则需要子组件定义props

免责声明:文章转载自《Vue的编译过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TCP/IP协议明明白白springcloud Alibaba 微服务 flowable 工作流 自定义表单 vue.js前后分离下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[vue问题解决]vue-cli项目引用mui.js报错Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be...

引用mui.js 报错信息: Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them 方案一 原因:...

vue 中使用 cesium

vue 中使用 cesium 我是在 vue 项目里面使用的 cesium,但是呢,有点问题,就是有些语法在js转vue的时候有些许的限制,比如说js中相对路径引入文件是一切OK的,vue 也能解决,但是呢,在引入的文件中又引用了其他的文件,vue 处理起来就不是特别的好用,所以说,我是直接在 vue 文件里面使用 iframe 标签引入的 html 文件...

【转】 一个后端开发的 Vue 笔记【入门级】

【转】 一个后端开发的 Vue 笔记【入门级】 一 前言 最近找了些教程,顺带着趴在官网上,看了看 Vue 的一些内容,入门的一些概念,以及基础语法,还有一些常用的操作,瞄了一眼,通篇文字+贴了部分代码 9000 多字,入门语法什么的还是很好理解的,以前也有一定做小程序的基础,感觉还是很相似的,不过对于一些稍复杂的点,感觉还是总结的不够细致,例如插槽,和...

在vue或js中的异或解密和aes(des)配合使用

简单粗暴,直接贴代码: 1 //AES解密 2 decryptData(toDecrypt) { 3 var key='mochouhuaNumber1';//密钥(和后端约定的) 4 var base64 = CryptoJS.enc.Utf8.parse(key); 5 var iv=CryptoJS.enc.U...

关于在vue里使用脚手架空行、空格会报错的问题

第一种方法:   重新用脚手架安装项目,在命令行里选择Use ESLint to lint your code?这项是输入  n   第二种方法: 找到build文件夹下的 webpack.base.config.js文件 打开注释到下面一段代码, var path = require('path')var utils = require('./utils...

Vue实现双向绑定的原理以及响应式数据

一、vue中的响应式属性    Vue中的数据实现响应式绑定    1、对象实现响应式:      是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep.notify进行发布通知,实现视图的更新。   2、数组实现响应式:    对于数组则...