生命周期图如下:

生命周期过程:

  1. 生命周期过程中,首先创建vue实例,然后初始化事件并监测数据。在created阶段之前就完成了数据的监测(这个阶段data和data的属性已存在,但是el未初始化)
  2. created函数触发后,开始初始化el,并且编译template。在created和beforeMount这两个阶段之间发生的事情比较多:
  • 首先判断对象是否有el选项,有的话向下编译,没有的话,则停止编译,也就意味着停止了生命周期,直到在该vue实例上调用vm.$mount(el)。
  • template参数选项是否对生命周期有影响:
    (a) 如果vue实例对象中有template参数选项,则将其作为模板编译成render函数。
    (b) 如果没有template选项,则将外部HTML作为模板编译。
    (c) 可以看到template中的模板优先级要高于outer HTML的优先级。

生命周期阶段详情

vue2.0 描述
beforeCreate 组建实例化刚被创建,该过程在组件属性计算之前,在这个时候data和el,以及自定义的message都是undefined
created 组件实例化创建完成,属性已绑定,但是dom还未生成,$el属性还不存在,在这个时候data和message已经初始化了
beforeMount 模板编译/挂载之前 $el和data、message都被初始化了
mounted 模板编译/挂载之后 $el和data、message都被初始化了
beforeUpdate 组件更新之前
updated 组件更新之后
activated keep-alive,组件激活时被调用
deactivated keep-alive,组件移除时被调用
beforeDestory 组件销毁前被调用
destory 组件销毁后被调用
eg
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue生命周期</title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
</head>
<body>
<div id="app">
<p>{{message}}</p>
<button v-on:click="change">点击改变值</button>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
message: 'hello'
},
methods: {
change: function () {
this.message = this.message.split('').reverse().join('');
}
},
beforeCreate: function () {
console.group('beforeCreate 创建前状态===============》');
console.log("%c%s", "color:red" , "el : " + this.$el); //undefined
console.log("%c%s", "color:red","data : " + this.$data); //undefined
console.log("%c%s", "color:red","message: " + this.message)
},
created: function () {
console.group('created 创建完毕状态===============》');
console.log("%c%s", "color:red","el : " + this.$el); //undefined
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
beforeMount: function () {
console.group('beforeMount 挂载前状态===============》');
console.log("%c%s", "color:red","el : " + (this.$el)); //已被初始化
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
mounted: function () {
console.group('mounted 挂载结束状态===============》');
console.log("%c%s", "color:red","el : " + this.$el); //已被初始化
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data); //已被初始化
console.log("%c%s", "color:red","message: " + this.message); //已被初始化
},
beforeUpdate: function () {
console.group('beforeUpdate 更新前状态===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
updated: function () {
console.group('updated 更新完成状态===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
beforeDestroy: function () {
console.group('beforeDestroy 销毁前状态===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message);
},
destroyed: function () {
console.group('destroyed 销毁完成状态===============》');
console.log("%c%s", "color:red","el : " + this.$el);
console.log(this.$el);
console.log("%c%s", "color:red","data : " + this.$data);
console.log("%c%s", "color:red","message: " + this.message)
}
})
</script>
</body>
</html>
复制代码

mounted和beforeMount这两种情况$el和data、message都被初始化了,但是其有一定的区别,beforeMount时应用虚拟Dom先把坑粘住了。mounted是挂载后的情况,在该阶段的时候,把值渲染进去。在beforeUpdate,可以监听到data的变化但是view层没有被重新渲染,view层的数据没有变化。等到updated的时候 view层才被重新渲染,数据更新。 如下图所示。

总结

  • beforeCreated:该状态在new Vue()之后,但这个阶段el,data,以及data内部的赋值都没有初始化。
  • created: 该状态数据已经被检测到了,data和data内部的值都可以取到,但是el还没有初始化
  • beforeMount:挂载前,这个时候el已经初始化了,但是dom结构内的使用data引用的值还没有被渲染
  • Mounted:挂载后,dom结构内的使用data引用的值已经被渲染

vue生命周期整理学习相关推荐

  1. 浅谈vue —— 生命周期

    记于vue生命周期的学习 每个 Vue 实例在被创建时都要经过一系列的初始化过程--例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些 ...

  2. Vue 生命周期记录_学习笔记

    官方给出的设计图入戏 为了能更好的理解这个图呢,写了下面的demo <!DOCTYPE html> <html><head><meta charset=&qu ...

  3. Vue生命周期,总也学不会,所以我详细整理了一下

    今天,我和大家一起来对vue生命周期做一个整理和思考,希望有缘人看到我的年度整理和思考,如果觉得靠谱呢,就交个朋友,如果觉得我整理的不足,就请指出,让我们一起进步,让我们2023年能共同思考. ☆ 文 ...

  4. 少侠请重新来过 - Vue学习笔记(二) - Vue生命周期

    Vue 生命周期和钩子 每一个vue实例创建时,会经历一段初始化的过程,同时会调用其生命周期钩子,实例的钩子this指向它的Vue实例,不需要在钩子用箭头函数. <template>< ...

  5. Vue 学习笔记(2)Vue 生命周期、组件

    Vue Vue 生命周期 Vue 中组件(Component) 全局组件的开发 局部组件的开发 组件中 props 的使用 在组件上声明静态数据传递给组件内部 在组件上声明动态数据传递给组件内部 pr ...

  6. Vue学习 — 详解Vue生命周期

    目录 一.前言 二.生命周期 1.beforeCreat / created (1).beforeCreat: (2).created: 2.eforeMount / mounted (1).befo ...

  7. vue生命周期中文图

    一.整理的Vue生命周期中文图 二.个人理解的Vue生命周期 什么是生命周期?简而言之:从生到死的过程,从Vue实例创建-运行-销毁的过程Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据. ...

  8. 标注图+部分举例聊聊Vue生命周期

    "你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高." 现在项目中遇到了,好好回头总结一波Vue生命周期,以后用到的时候再来翻翻. 啥叫Vue生命周 ...

  9. vue生命周期图示中英文版Vue实例生命周期钩子

    vue生命周期图示中英文版Vue实例生命周期钩子 知乎上近日有人发起了一个 "react 是不是比 vue 牛皮,为什么?" 的问题,Vue.js 作者尤雨溪12月4日正面回应了该 ...

最新文章

  1. Mysql是时候学习一个存储过程了
  2. php sf框架,GitHub - YanCastle/sf: php swoole framework
  3. 将shp文件导入到GeoDatabase中
  4. memcached 常用命令及使用说明
  5. 2682. 【WC2012选拔12.17】最长双回文串
  6. Flink安装及使用
  7. C# —— 深入理解委托类型
  8. python教程1003无标题_OSError:[WinError 10038]试图对非s的对象执行操作
  9. python encodings模块_python-ImportError:没有名为“ encodings”的模块
  10. Linux pthread_mutex_init()函数 [转]
  11. Internet Explorer无法下载
  12. python手机号定位_利用python进行人肉搜索(一) [获取手机号]
  13. 用qt建立自定义对话框的方法,含vc2015 vc版本中使用
  14. JS实现 b站直播弹幕自动补中括号、一键常用语脚本
  15. c语言case小于,大于和小于switch语句C
  16. java根据身份证号计算持有者年龄--超容易
  17. 逻辑回归中的梯度下降法
  18. Keil 4 安装教程及简单使用【嵌入式系统】
  19. vue大屏(驾驶舱)实现数字滚动
  20. 计算机管理中不显示独立显卡,win10系统下检测不到独立显卡如何解决

热门文章

  1. mesh threejs 属性_ThreeJS拖动案例解析
  2. linux服务器分区方案
  3. ui做成html格式,使用element-ui的table组件时,渲染为html格式
  4. 王道 计算机网络试题讲解_2016年计算机网络考研真题及解析
  5. python中如何导入sklearn_Python中常用包——sklearn主要模块和基本使用方法
  6. markdown 链接跳转到标题_如何使用markdown语法来写文章
  7. php公共控制器,Thinkphp 3.2.3 公共控制器的使用
  8. android9 system_server 访问sd卡_Leez学院丨手把手教你栗子板Android9固件编译
  9. python flask框架是什么_Python三大web框架分别是什么 哪个更好
  10. 斐波那契数列-爬楼梯算法