每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。下图展示的就是一个vue实例对象的生命周期

从图上我们可以看到vue在生命周期中有这些状态,beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed。Vue在实例化的过程中,会调用这些生命周期的钩子,给我们提供了执行自定义逻辑的机会。那么,在这些vue钩子中,vue实例到底执行了那些操作,我们先看下面执行的例子

var vm = new Vue({
el: "#container",
data: {
test : 'hello world'
},
beforeCreate: function(){
console.log(this);
showData('创建vue实例前',this);
},
created: function(){
showData('创建vue实例后',this);
},
beforeMount:function(){
showData('挂载到dom前',this);
},
mounted: function(){
showData('挂载到dom后',this);
},
beforeUpdate:function(){
showData('数据变化更新前',this);
},
updated:function(){
showData('数据变化更新后',this);
},
beforeDestroy:function(){
vm.test ="3333";
showData('vue实例销毁前',this);
},
destroyed:function(){
showData('vue实例销毁后',this);
} }); function realDom(){
console.log('真实dom结构:' + document.getElementById('container').innerHTML);
}
function showData(process,obj){
console.log(process);
console.log('data 数据:' + obj.test)
console.log('挂载的对象:')
console.log(obj.$el)
realDom();
console.log('------------------')
console.log('------------------')
}

我们可以看到,vue对象初始化过程中,会执行到beforeCreate,created,beforeMount,mounted 这几个钩子的内容

beforeCreate :数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象

created :数据已经绑定到了对象实例,但是还没有挂载对象

beforeMount: 模板已经编译好了,根据数据和模板已经生成了对应的元素对象,将数据对象关联到了对象的 $el属性,$el属性是一个HTMLElement对象,也就是这个阶段,vue实例通过原生的createElement等方法来创建这个html片段,准备注入到我们vue实例指明的el属性所对应的挂载点

mounted:将$el的内容挂载到了el,相当于我们在jquery执行了$(el).html($el),生成页面上真正的dom,上面我们就会发现dom的元素和我们$el的元素是一致的。在此之后,我们能够用方法来获取到el元素下的dom对象,并进 行各种操作

当我们的data发生改变时,会调用beforeUpdate和updated方法

beforeUpdate :数据更新到dom之前,我们可以看到$el对象已经修改,但是我们页面上dom的数据还没有发生改变

updated: dom结构会通过虚拟dom的原则,找到需要更新页面dom结构的最小路径,将改变更新到dom上面,完成更新

实例的销毁

beforeDestroy,destroed :实例的销毁,vue实例还是存在的,只是解绑了事件的监听还有watcher对象数据与view的绑定,即数据驱动

最新文章

  1. LTE Air interface Channels-----http://www.rfwireless-world.com/Tutorials/LTE-logical-transport-physical-channels.html
  2. py2exe 打包scipy时遇到的问题
  3. javascript-外观模式
  4. WCF初探-10:WCF客户端调用服务
  5. c语言 动态数组
  6. TYVJ P1031 热浪 Label:dijkstra 最短路
  7. select resharper shortcuts scheme
  8. Bootstrap <第一篇>
  9. Head First设计模式-观察者模式
  10. Java高精度学习第二弹——求N!
  11. 谈JS中的作用域链与原型链(1)
  12. 读Zepto源码之Deferred模块
  13. 第十五节、OpenCV学习(四)图像平滑与滤波
  14. linux svn安装 及 常用命令
  15. FCC JS基础算法题(12):Where do I belong(数组排序并找出元素索引)
  16. Btrace使用教程
  17. openstack安装指南和在centos7上的安装指南
  18. UE4 材质Lerp节点解疑
  19. Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较
  20. MT【86】两个绝对值之和最大

热门文章

  1. 河南省多校联盟二-A
  2. day17 Django学习三
  3. Algorithm2: 重复查过半数的元素
  4. poj3656
  5. 深入理解java泛型
  6. 一些常用的UI控件
  7. js 可拉伸表格
  8. AOP的Advice
  9. windows配置redis(转)
  10. MVC4中视图获取控制器中返回的json格式数据