在面试的时候,vue生命周期被考察的很频繁。

什么是vue生命周期呢?

Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。

在Vue的整个生命周期中,提供了一系列的事件,可以注册JavaScript方法,达到控制整个过程的目的,在这些JavaScript方法中的this直接指向的是vue的实例

在Vue的整个生命周期中,实例可以调用一些生命周期钩子的函数,这提供了执行自定义逻辑的机会。给予用户机会在一些特定的场景下添加他们自己的代码。

生命周期钩子的函数又是哪些呢?请看下图中红色方框标注的都是生命周期钩子函数。

Vue提供的生命周期钩子如下:

  1. ① beforeCreate
  2.  
  3. 在实例初始化之后,数据观测(data observer,开始监控Data对象数据变化)和初始化事件(init eventVue内部初始化事件)之前被调用。
  4.  
  5. ② created
  6.  
  7. 在实例已经创建完成之后被调用。实例已完成以下的配置:数据观测(data observer),属性和方法的运算,event事件回调。挂载阶段尚未开始,$el 属性不可见。
  8.  
  9. ③ beforeMount
  10.  
  11. 在挂载开始之前被调用。相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
  12.  
  13. ④ mounted
  14.  
  15. el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。此时模板中的html渲染到了html页面中,此时一般可以做一些Ajax操作。注意mounted只会执行一次。
  16.  
  17. ⑤ beforeUpdate
  18.  
  19. 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
  20.  
  21. ⑥ updated
  22.  
  23. 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  24.  
  25. ⑦ beforeDestroy
  26.  
  27. 在实例销毁之前调用。实例仍然完全可用。
  28.  
  29. ⑧ destroyed
  30.  
  31. 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

先用created这个生命周期钩子函数举个小栗子,请看下面代码:

  1. window.onload = () => {
  2. new Vue({
  3. data: {
  4. name: "Tom"
  5. },
  6. created: function () {
  7. console.log(this.name) //this指向vm实例。打印结果:Tom
  8. }
  9. })
  10. }

下图说明了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。

再来个完整的栗子,如下:

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <title></title>
  6. <script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
  7. </head>
  8.  
  9. <body>
  10. <div id="app">
  11. <p>{{ message }}</p>
  12. </div>
  13. <script type="text/javascript">
  14. var app = new Vue({
  15. el: '#app',
  16. data: {
  17. message: "Vue生命周期学习理解"
  18. },
  19. beforeCreate: function () {
  20. console.group('beforeCreate 创建前状态');
  21. console.log("%c%s", "color:red", "el : " + this.$el);
  22. console.log("%c%s", "color:red", "data : " + this.$data);
  23. console.log("%c%s", "color:red", "message: " + this.message)
  24. },
  25. created: function () {
  26. console.group('created 创建完毕状态');
  27. console.log("%c%s", "color:red", "el : " + this.$el);
  28. console.log("%c%s", "color:red", "data : " + this.$data);
  29. console.log("%c%s", "color:red", "message: " + this.message);
  30. },
  31. beforeMount: function () {
  32. console.group('beforeMount 挂载前状态');
  33. console.log("%c%s", "color:red", "el : " + (this.$el));
  34. console.log(this.$el);
  35. console.log("%c%s", "color:red", "data : " + this.$data);
  36. console.log("%c%s", "color:red", "message: " + this.message);
  37. },
  38. mounted: function () {
  39. console.group('mounted 挂载结束状态');
  40. console.log("%c%s", "color:red", "el : " + this.$el);
  41. console.log(this.$el);
  42. console.log("%c%s", "color:red", "data : " + this.$data);
  43. console.log("%c%s", "color:red", "message: " + this.message);
  44. },
  45. beforeUpdate: function () {
  46. console.group('beforeUpdate 更新前状态');
  47. console.log("%c%s", "color:red", "el : " + this.$el);
  48. console.log(this.$el);
  49. console.log("%c%s", "color:red", "data : " + this.$data);
  50. console.log("%c%s", "color:red", "message: " + this.message);
  51. },
  52. updated: function () {
  53. console.group('updated 更新完成状态');
  54. console.log("%c%s", "color:red", "el : " + this.$el);
  55. console.log(this.$el);
  56. console.log("%c%s", "color:red", "data : " + this.$data);
  57. console.log("%c%s", "color:red", "message: " + this.message);
  58. },
  59. beforeDestroy: function () {
  60. console.group('beforeDestroy 销毁前状态');
  61. console.log("%c%s", "color:red", "el : " + this.$el);
  62. console.log(this.$el);
  63. console.log("%c%s", "color:red", "data : " + this.$data);
  64. console.log("%c%s", "color:red", "message: " + this.message);
  65. },
  66. destroyed: function () {
  67. console.group('destroyed 销毁完成状态');
  68. console.log("%c%s", "color:red", "el : " + this.$el);
  69. console.log(this.$el);
  70. console.log("%c%s", "color:red", "data : " + this.$data);
  71. console.log("%c%s", "color:red", "message: " + this.message)
  72. }
  73. })
  74. </script>
  75. </body>
  76.  
  77. </html>

打印出来的结果请看下图;

关于生命周期参考博文:http://www.cnblogs.com/fly_dragon/p/6220273.html

关于Vue系列学习教程参考博文:http://www.cnblogs.com/ghostwu/p/7359055.html

面试题之(vue生命周期)的更多相关文章

  1. Vue生命周期,面试常见问题

    一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数 ...

  2. vue生命周期的介绍

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. vue 生命周期

    一 vue的生命周期如下图所示(很清晰) 二 vue生命周期的栗子 注意触发vue的created事件以后,this便指向vue实例,这点很重要 <!DOCTYPE html> <h ...

  4. 详解vue生命周期

    vue生命周期 @(vue)[生命周期] 前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周 ...

  5. 关于vue生命周期

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

  6. vue生命周期的理解

    我从官网上下载了一张vue生命周期的图,接下来实际分析一波vue到底执行了什么东西. 1.我们在使用vue时必不可少的操作就是 var vm = new Vue({}),这样我们就创建了一个vue的实 ...

  7. 【Vue笔记】-- 详解vue生命周期

    针对于Vue的生命周期进行详细的说明,方面加深对各个方法的引用. 引言: 前几天重新回顾vue官网时,看到vue的生命周期,想着自己用vue开发了快一年了,就总结总结vue知识,再次加深自己对vue的 ...

  8. [转] Vue生命周期

    Vue生命周期 这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </sectio ...

  9. vue生命周期、钩子函数

    https://segmentfault.com/a/1190000011381906    详解生命周期和钩子函数 每个vue实例再被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期 ...

随机推荐

  1. 使用SSM重新开发计科院网站

    一.游览 在游览器地址栏输入:http://localhost:8080/index,即访问计科院首页,由于前期对数据库以及JavaBean的设计考虑不够充分,导致后期的代码臃肿,所以项目启动时对首页 ...

  2. mysql5.7忽略大小写问题

    mysql5.7忽略大小写问题 1.1 前言 新安装mysql5.7版本后,linux环境下默认是大小写敏感的. 1.2 忽略大小写敏感步骤 进入mysql配置文件:         vi   /et ...

  3. Tensorboard可视化(关于TensorFlow不同版本引起的错误)

    # -*- coding: utf-8 -*-"""Created on Sun Nov 5 15:28:50 2017 @author: Administrator&q ...

  4. Docker常用命令(一)

    [转]原始出处:http://zxx287856774.blog.51cto.com/3417296/1665264 docker中 启动所有的容器命令 docker start $(docker p ...

  5. TCP与UDP区别总结

    TCP与UDP区别总结:1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...

  6. Oracle客户端、服务的安装及干净卸载Oracle

    软件下载地址: 链接:https://pan.baidu.com/s/1Sluf890eNuaV8muL55eO2w 提取码:oez7 服务端因文件过大,所以分了两个文件压缩包,下载后将内容解压后放置 ...

  7. pytorch学习:准备自己的图片数据

    图片数据一般有两种情况: 1.所有图片放在一个文件夹内,另外有一个txt文件显示标签. 2.不同类别的图片放在不同的文件夹内,文件夹就是图片的类别. 针对这两种不同的情况,数据集的准备也不相同,第一种 ...

  8. Zabbix通过IPMI监控HPE服务器硬件

    IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...

  9. HttpClientFactory与Steeltoe结合来完成服务发现

    前言 上一篇说了一下用HttpClientFactory实现了简单的熔断降级. 这篇就来简单说说用HttpClientFactory来实现服务发现.由于标题已经好明显的说了Steeltoe 因此这里会 ...

  10. Solr04 - 在Jetty和Tomcat上部署Solr单机服务

    目录 1 准备安装环境 2 通过内部Jetty服务器启动 3 通过配置Tomcat服务器启动 3.1 删除不需要的应用 3.2 修改服务端口 3.3 部署solr.war 3.4 扩展: 虚拟目录发布 ...