官方文档上关于Vue生命周期的图片大家一定很熟悉:

1、beforeCreate

实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载呢,只是一个空壳,无法访问到数据和真实的dom,一般不做操作。
2、created
挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取。
3、beforeMount
接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取。
4、mounted
接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...
5、beforeUpdate
当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿。
6、updated
当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom。
7、beforeDestroy
当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等。
8、destroyed
组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以。

下面将通过一段代码示例来说明Vue生命周期的各个阶段,示例代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue生命周期</title>
  6. <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <div>{{message}}</div><button @click="handleClick">更新</button>
  11. </div>
  12. </body>
  13. <script>
  14. var vm = new Vue({
  15. el: '#app',
  16. data: {
  17. message: 'Vue的生命周期'
  18. },
  19. beforeCreate() {
  20. console.log('-----------beforeCreate阶段-----------');
  21. console.log('el: ' + this.$el);
  22. console.log('data: ' + this.$data);
  23. console.log('message: ' + this.message);
  24. },
  25. created() {
  26. console.log('-----------created阶段-----------');
  27. console.log('el: ' + this.$el);
  28. console.log('data: ' + this.$data);
  29. console.log('message: ' + this.message);
  30. },
  31. beforeMount() {
  32. console.log('-----------beforeMount阶段-----------');
  33. console.log('el: ' + this.$el);
  34. console.log(this.$el);
  35. console.log('data: ' + this.$data);
  36. console.log('message: ' + this.message);
  37. },
  38. mounted() {
  39. console.log('-----------mounted阶段-----------');
  40. console.log('el: ' + this.$el);
  41. console.log(this.$el);
  42. console.log('data: ' + this.$data);
  43. console.log('message: ' + this.message);
  44. },
  45. beforeUpdate() {
  46. console.log('-----------beforeUpdate阶段-----------');
  47. console.log('el: ' + this.$el);
  48. console.log(document.getElementById('app').innerHTML);
  49. console.log('data: ' + this.$data);
  50. console.log('message: ' + this.message);
  51. },
  52. updated() {
  53. console.log('-----------updated阶段-----------');
  54. console.log('el: ' + this.$el);
  55. console.log(document.getElementById('app').innerHTML);
  56. console.log('data: ' + this.$data);
  57. console.log('message: ' + this.message);
  58. },
  59. beforeDestroy() {
  60. console.log('-----------beforeDestroy阶段-----------');
  61. console.log('el: ' + this.$el);
  62. console.log(document.getElementById('app').innerHTML);
  63. console.log('data: ' + this.$data);
  64. console.log('message: ' + this.message);
  65. },
  66. destroyed() {
  67. console.log('-----------destroyed阶段-----------');
  68. console.log('el: ' + this.$el);
  69. console.log(document.getElementById('app').innerHTML);
  70. console.log('data: ' + this.$data);
  71. console.log('message: ' + this.message);
  72. },
  73. methods: {
  74. handleClick(e) {
  75. this.message = '更新了message状态';
  76. }
  77. }
  78. })
  79. </script>
  80. </html>

运行代码后在浏览器控制台打印信息如下:

Vue生命周期学习总结的更多相关文章

  1. Vue生命周期学习

    转自https://www.w3cplus.com/vue/vue-instances-and-life-cycles.html Vue实例虽然没有完全遵循MVVM模型,但Vue的设计无疑受到了它的启 ...

  2. vue生命周期-学习心得

    每个Vue实例在被创建之前都要经过一系列的初始化过程,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,这个过程就是vue的生命周期. 1 vue生命周期图 {: ...

  3. vue生命周期学习(watch跟computed)

    1.watch钩子函数监听数据的变化 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算. <div> <p>FullNam ...

  4. 学习vue生命周期

    首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉: 可以看到在vue一整个的生命周期中会有很多钩子函 ...

  5. 关于vue生命周期

    官网给出的实例的生命周期图如下: beforeCreate(页面创建前),created(页面创建后),beforeMount(页面载入前),mounted(页面载入后),beforeUpdate(页 ...

  6. 面试题之(vue生命周期)

    在面试的时候,vue生命周期被考察的很频繁. 什么是vue生命周期呢? Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这 ...

  7. vue生命周期钩子

    转载自:https://segmentfault.com/a/1190000008010666?utm_source=tag-newest https://segmentfault.com/a/119 ...

  8. Vue生命周期 以及应用场景

    首先一张官方图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 14、前端知识点--Vue生命周期浅析

    vue生命周期 每个Vue实例或组件从创建到显示再到废弃的过程就是vue的生命周期.很多时候我们希望能在这个过程中执行一些操作,于是就有了生命周期钩子. 生命周期钩子函数允许我们在实例不同阶段执行各种 ...

随机推荐

  1. 操作系统之LRU算法 C语言链表实现

    LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历 ...

  2. springmvc restful风格操作

    ssm框架 controller: package com.sgcc.controller; import java.util.ArrayList; import java.util.List; im ...

  3. 集合--Set&&HashSet和TreeSet

    特点:元素无序,不可重复 1.添加元素 set.add("tanlei"); set.addAll(Arrays.asList(44,"磊","磊&q ...

  4. [React Native]升级React Native版本

    React Native正式版本还没发布,但是小版本基本上每个月都更新1-2次.9月11号又更新了0.33版本,其中有两个增强功能正好是项目中用到的. 添加Android6.0权限验证API Add ...

  5. Android Studio 如何引入.jar文件和.so文件?

    最近刚从Eclipse投入Android Studio的怀抱,可是在开发一个地图有关的应用,添加高德地图API的.jar和.so库文件时,遇到了问题.在Eclipse中只要简单地复制粘贴就可以了,但是 ...

  6. 如何编写go代码

    go是一种静态编译型的语言,它的编译速度非常快. go的官方编译器称为gc,包括编译工具5g,6g和8g,连接工具5l,6l和8l.其中的数字表示处理器的架构.我们不必关心如何挑选这些工具,因为go提 ...

  7. 【算法】[leetcode] permutations的讨论(转载)

    原题是找到一组数的全排列 Given a collection of numbers, return all possible permutations. For example,[1,2,3] ha ...

  8. python 数据的写入

  9. python 列表长度

  10. Python基础:16面向对象概述

    1:在版本2.2 中,Python社区最终统一了类型(type)和类(class),新式类具备更多高级的OOP特性,扮演了一个经典类(旧式类)超集的角色,后者是Python 诞生时所创造的类对象. 2 ...