公众号后台收到不少同学催更新,马上来。

上两节我们都是讲vue的实例,简单创建和定义实例的4个常用选项,没看过的伙伴可以先去看上两节,按顺序学习比较容易掌握。

这一节我们学习vue实例的生命周期,没错,实例也跟动物一样,有自己的“生命”,实例也会经历出生至死亡的各个阶段。

Vue把整个生命周期划分为创建、挂载、更新、销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作。学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们的业务代码。

我们分别来看看这几个阶段:

1. beforeCreate

此阶段为实例初始化之后,此时的数据观察和事件配置都没好准备好。

我们试着console一下实例的数据data和挂载元素el,代码如下:

<div id="app">{{name}}</div>
  <script>
    let app = new Vue({
      el:"#app",
        data:{
         name:"前端君"
      },
      beforeCreate(){
         console.log('即将创建');
         console.log(this.$data);
         console.log(this.$el);
      }
    });
 </script>

得到的结果是:

此时的实例中的datael还是undefined,不可用的。

2. created

beforeCreate之后紧接着的钩子就是创建完毕created,我们同样打印一下数据data和挂载元素el,看会得到什么?

在上一段代码的基础上,加上下面这段代码:

 created(){    console.log('创建完毕');    console.log(this.$data);    console.log(this.$el); }

我们看到打印的结果:

此时,我们能读取到数据data的值,但是DOM还没生成,所以属性el还不存在,输出$data为一个Object对象,而$el的值为undefined。

3. beforeMount

上一个阶段我们知道DOM还没生成,属性el还为undefined,那么,此阶段为即将挂载,我们打印一下此时的$el是什么?

增加一下代码:

 beforeMount(){    console.log('即将挂载');    console.log(this.$el); }

我们看到打印结果:

此时的$el不再是undefined,而是成功关联到我们指定的dom节点<div id=”app”></div>,但此时{{ name }}还没有被成功地渲染成我们data中的数据。没事,我们接着往下看。

4. mounted

mounted也就是挂载完毕阶段,到了这个阶段,数据就会被成功渲染出来,我们编写mounted的钩子,打印$el 看看:

 mounted(){    console.log('挂载完毕');    console.log(this.$el); }

打印结果:

如我们所愿,此时打印属性el,我们看到{{ name }}已经成功渲染成我们data.name的值:“前端君”。

5. beforeUpdate

我们知道,当修改vue实例的data时,vue就会自动帮我们更新渲染视图,在这个过程中,vue提供了beforeUpdate的钩子给我们,在检测到我们要修改数据的时候,更新渲染视图之前就会触发钩子beforeUpdate。

html片段代码我们加上ref属性,用于获取DOM元素(后期会讲到)。

 <div ref="app" id="app">    {{name}} </div>

Vue实例代码加上beforeUpdate钩子代码:

  beforeUpdate(){  console.log('=即将更新渲染=');  let name = this.$refs.app.innerHTML;  console.log('name:'+name); },

我们试一下,在控制台修改一下实例的数据name,在更新渲染之前,我们打印视图中文本innerHTML的内容会是多少:

(gif图,加载需要点时间)

我们在控制台把app.name的值从原来的 “前端君” 修改成 “web前端教程”,在更新视图之前beforeUpdate打印视图上的值,结果依然为原来的值:“前端君”,表明在此阶段,视图并未重新渲染更新

6. updated

此阶段为更新渲染视图之后,此时再读取视图上的内容,已经是最新的内容,接着上面的案例,我们添加钩子updated的代码,如下:

 updated(){  console.log('==更新成功==');  let name = this.$refs.app.innerHTML;  console.log('name:'+name); }

结果如下:

(gif图,多看2遍,注意视图变化)

大家注意两个不同阶段打印的name的值是不一样,updated阶段打印出来的name已经是最新的值:“web前端教程”,说明此刻视图已经更新了。

7. beforeDestroy

调用实例的destroy( )方法可以销毁当前的组件,在销毁前,会触发beforeDestroy钩子。

8. destroyed

成功销毁之后,会触发destroyed钩子,此时该实例与其他实例的关联已经被清除,它与视图之间也被解绑。

案例:我们通过在销毁前通过控制台修改实例的name,和销毁之后再次修改,看看情况。

 beforeDestroy(){   console.log('销毁之前'); }, destroyed(){   console.log('销毁成功'); }

效果如下图:

(gif图,多看2遍,注意视图变化)

销毁之前,修改name的值,可以成功修改视图显示的内容为:“更新视图”,一旦效用实例的$destroy( )方法销毁之后,实例与视图的关系解绑,再修改name的值,已于事无补,视图再也不会更新了,说明实例成功被销毁了。

9. actived

keep-alive组件被激活的时候调用。

10. deactivated

keep-alive 组件停用时调用。

关于keep-alive组件的激活和停用,我们后面讲到具体案例再介绍,在这里你只需要知道vue提供了keep-alive组件激活和停用的钩子就可以了。

本节小结

掌握实例生命周期的8个阶段:

(生命周期示例图)

以后最为常用的钩子是:created 成功创建。

扩展阅读

1.《ECMAScript 6 系列》原创教程

第五节:轻松掌握 vue 实例的生命周期相关推荐

  1. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  2. Vue实例的生命周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  3. 计算属性与监听器、Vue 实例的生命周期

    本文是我在学习过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习. 计算属性与监听器.Vue 实例的生命周期 前言 一.计算属性 1.1.计算属性初步理解 1.2.计算 ...

  4. vue实例的生命周期详解

    Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期. 官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程.从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这 ...

  5. 7、Vue实例的生命周期钩子(created、mounted、updated、destoryed)

    1.Vue实例 new Vue()创建一个Vue实例 所有的组件其实都是Vue实例 2.Vue实例的生命周期钩子 每个Vue实例在被创建时都要经过一系列的初始化过程 初始化过程 created() 组 ...

  6. vue 请求在子组件加载后了_从零单排vue第九课--Vue实例及生命周期

    前期回顾 上一节课我们重点学习了子组件如何与父组件通信,我们使用$emit方法在子组件中触发一个事件,然后在父组件中接收它.本节课我们来深入了解下vue实例以及它的生命周期是怎么样的? 创建一个Vue ...

  7. 关于Vue实例的生命周期created和mounted的区别

    关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发.合适和够用是最完美的追求. 个人网站:http://w ...

  8. vue实例以及生命周期

    1.Vue实例API 1.构造器(实例化) var vm = new Vue({ //选项 |-------DOM(3) | |-------el (提供一个在页面上已存在的 DOM 元素作为 Vue ...

  9. Vue实例和生命周期

    创建一个Vue实例 每个Vue应用都是通过Vue函数创建一个新的Vue实例开始: var vm = new Vue({//选项 }) 数据与方法 当一个Vue实例被创建时,它向Vue的响应式系统中加入 ...

最新文章

  1. django权限系统实现步骤_Django密码系统实现过程详解
  2. java uv实例_Java注解的实际应用案例讲解
  3. 华为机考回忆版(三:自己的)
  4. 原生js获取css样式
  5. Mercurial 版本控制服务器(Web Server)的搭建
  6. adult道具项目开发 - 模式
  7. LeetCode:二进制手表【401】
  8. C# Winform 窗体美化(四、镂空窗体)
  9. php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法
  10. c花体复制_花式字体大全可复制 花式字体转换器
  11. mysql 数组变量_如何在MySQL中模拟数组变量?
  12. OpenGIS--GDAL库学习笔记
  13. 数据库测试JBDCTest
  14. VS2010 error RC2135: file not found
  15. WindRiver WorkBench创建、编译vxWorks APP工程
  16. 01 官网下载各种CentOS教程(超详细版)
  17. Codeforces--760B--Frodo and pillows
  18. 微信网页扫码登录的实现(两种方式)
  19. Android Studio第六课:模仿QQ登录跳转
  20. 数据结构课程设计项目2:校园导游咨询-预习报告

热门文章

  1. 互联网环境下分布式事务处理系统现状与趋势
  2. 用Map构造选择题题库(洛谷P5601题题解,Java语言描述)
  3. 质因数分解(洛谷P1075题题解,Java语言描述)
  4. 需求分析——掌握和使用UML建模语言顺序图模型
  5. Linux系统挂起进程的几种方法
  6. UIActivityViewController实现系统原生分享
  7. Linux系统调用(syscall)原理(转)
  8. jquery $.get()、$.ajax()与后台servlet交互方法
  9. pptv多屏互动服务怎么删除
  10. (转)海岸线提取完成, 海浪排岸效果