面试题之(vue生命周期)
在面试的时候,vue生命周期被考察的很频繁。
什么是vue生命周期呢?
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
在Vue的整个生命周期中,提供了一系列的事件,可以注册JavaScript方法,达到控制整个过程的目的,在这些JavaScript方法中的this直接指向的是vue的实例。
在Vue的整个生命周期中,实例可以调用一些生命周期钩子的函数,这提供了执行自定义逻辑的机会。给予用户机会在一些特定的场景下添加他们自己的代码。
生命周期钩子的函数又是哪些呢?请看下图中红色方框标注的都是生命周期钩子函数。
Vue提供的生命周期钩子如下:
- ① beforeCreate
- 在实例初始化之后,数据观测(data observer,开始监控Data对象数据变化)和初始化事件(init event,Vue内部初始化事件)之前被调用。
- ② created
- 在实例已经创建完成之后被调用。实例已完成以下的配置:数据观测(data observer),属性和方法的运算,event事件回调。挂载阶段尚未开始,$el 属性不可见。
- ③ beforeMount
- 在挂载开始之前被调用。相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
- ④ mounted
- 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。此时模板中的html渲染到了html页面中,此时一般可以做一些Ajax操作。注意mounted只会执行一次。
- ⑤ beforeUpdate
- 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
- ⑥ updated
- 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
- ⑦ beforeDestroy
- 在实例销毁之前调用。实例仍然完全可用。
- ⑧ destroyed
- 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
先用created这个生命周期钩子函数举个小栗子,请看下面代码:
- window.onload = () => {
- new Vue({
- data: {
- name: "Tom"
- },
- created: function () {
- console.log(this.name) //this指向vm实例。打印结果:Tom
- }
- })
- }
下图说明了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。
再来个完整的栗子,如下:
- <!DOCTYPE html>
- <html>
- <head>
- <title></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>
- </div>
- <script type="text/javascript">
- var app = new Vue({
- el: '#app',
- data: {
- message: "Vue生命周期学习理解"
- },
- beforeCreate: function () {
- console.group('beforeCreate 创建前状态');
- console.log("%c%s", "color:red", "el : " + this.$el);
- console.log("%c%s", "color:red", "data : " + this.$data);
- console.log("%c%s", "color:red", "message: " + this.message)
- },
- created: function () {
- console.group('created 创建完毕状态');
- console.log("%c%s", "color:red", "el : " + this.$el);
- 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>
打印出来的结果请看下图;
关于生命周期参考博文:http://www.cnblogs.com/fly_dragon/p/6220273.html
关于Vue系列学习教程参考博文:http://www.cnblogs.com/ghostwu/p/7359055.html
面试题之(vue生命周期)的更多相关文章
- Vue生命周期,面试常见问题
一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数 ...
- vue生命周期的介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- vue 生命周期
一 vue的生命周期如下图所示(很清晰) 二 vue生命周期的栗子 注意触发vue的created事件以后,this便指向vue实例,这点很重要 <!DOCTYPE html> <h ...
- 详解vue生命周期
vue生命周期 @(vue)[生命周期] 前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周 ...
- 关于vue生命周期
官网给出的实例的生命周期图如下: beforeCreate(页面创建前),created(页面创建后),beforeMount(页面载入前),mounted(页面载入后),beforeUpdate(页 ...
- vue生命周期的理解
我从官网上下载了一张vue生命周期的图,接下来实际分析一波vue到底执行了什么东西. 1.我们在使用vue时必不可少的操作就是 var vm = new Vue({}),这样我们就创建了一个vue的实 ...
- 【Vue笔记】-- 详解vue生命周期
针对于Vue的生命周期进行详细的说明,方面加深对各个方法的引用. 引言: 前几天重新回顾vue官网时,看到vue的生命周期,想着自己用vue开发了快一年了,就总结总结vue知识,再次加深自己对vue的 ...
- [转] Vue生命周期
Vue生命周期 这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </sectio ...
- vue生命周期、钩子函数
https://segmentfault.com/a/1190000011381906 详解生命周期和钩子函数 每个vue实例再被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期 ...
随机推荐
- 使用SSM重新开发计科院网站
一.游览 在游览器地址栏输入:http://localhost:8080/index,即访问计科院首页,由于前期对数据库以及JavaBean的设计考虑不够充分,导致后期的代码臃肿,所以项目启动时对首页 ...
- mysql5.7忽略大小写问题
mysql5.7忽略大小写问题 1.1 前言 新安装mysql5.7版本后,linux环境下默认是大小写敏感的. 1.2 忽略大小写敏感步骤 进入mysql配置文件: vi /et ...
- Tensorboard可视化(关于TensorFlow不同版本引起的错误)
# -*- coding: utf-8 -*-"""Created on Sun Nov 5 15:28:50 2017 @author: Administrator&q ...
- Docker常用命令(一)
[转]原始出处:http://zxx287856774.blog.51cto.com/3417296/1665264 docker中 启动所有的容器命令 docker start $(docker p ...
- TCP与UDP区别总结
TCP与UDP区别总结:1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...
- Oracle客户端、服务的安装及干净卸载Oracle
软件下载地址: 链接:https://pan.baidu.com/s/1Sluf890eNuaV8muL55eO2w 提取码:oez7 服务端因文件过大,所以分了两个文件压缩包,下载后将内容解压后放置 ...
- pytorch学习:准备自己的图片数据
图片数据一般有两种情况: 1.所有图片放在一个文件夹内,另外有一个txt文件显示标签. 2.不同类别的图片放在不同的文件夹内,文件夹就是图片的类别. 针对这两种不同的情况,数据集的准备也不相同,第一种 ...
- Zabbix通过IPMI监控HPE服务器硬件
IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...
- HttpClientFactory与Steeltoe结合来完成服务发现
前言 上一篇说了一下用HttpClientFactory实现了简单的熔断降级. 这篇就来简单说说用HttpClientFactory来实现服务发现.由于标题已经好明显的说了Steeltoe 因此这里会 ...
- Solr04 - 在Jetty和Tomcat上部署Solr单机服务
目录 1 准备安装环境 2 通过内部Jetty服务器启动 3 通过配置Tomcat服务器启动 3.1 删除不需要的应用 3.2 修改服务端口 3.3 部署solr.war 3.4 扩展: 虚拟目录发布 ...