定义:vue的生命周期是指vue实例从初始化创建到实例销毁的过程。期间会有8个钩子函数的调用。

vue的钩子函数图解:

vue的钩子函数使用总结:

1、beforeCreate(创建前):beforeCreate钩子函数,这个时候,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。无法访问到数据和真实的dom和data中的数据,可以在这里面使用loading

2、created(创建后):created函数中可以对data对象里面的数据进行使用和更改,不会触发其他的钩子函数,一般可以在这里做初始数据的获取,也可以结束loading; 这里进行dom操作需要使用vue.nextTick()方法

3、beforeMount(挂载前):beforeMount钩子函数,vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换。在这里也可以更改数据,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

4、mounted(挂载后):mounted钩子函数,此时,组件已经出现在页面中数据、真实dom都已经处理好了,事件都已经挂载好了,data.filter成功渲染可以在这里操作真实dom等事情...

5、beforeUpdate (更新前):当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿

6、updated(更新后):当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom

7、beforeDestroy(销毁前):当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等

8、destroyed(销毁后):vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在。这个时候,执行destroyed,在这里做善后工作也可以

vue的钩子函数代码验证:

console打印效果:

demo验证代码:

<template><div><h3>{{testMsg}}</h3><p style="color:red;" id="testNum">{{testNum}}</p><div><button @click="changNum()">点击修改num的数值大小</button></div><p style="color:red;">过滤器处理后的值:{{testNum | add(10,20)}}</p><div><button @click="destroyVue()">销毁</button></div></div>
</template><script>
export default {name: 'HelloWorld',// data是数据对象data () {   return {testMsg:"原始值",num:2,}},//computed对象包括需要计算的属性,属性值依赖于别的数据computed:{testNum:function(){let that =this;return that.num * 3;},},//检测某一属性值的变化,属性值的变化会造成其他dom变化watch:{testNum:function(val){if(val>9){console.log("testNum的值变得大于9了!");}}},//组件内部的方法methods:{changNum:function(){let that =this;that.num=5;},destroyVue:function(){this.$destroy();}},//过滤器对象,filter的第一个参数默认是当前的item值filters:{add:function(val,num1,num2){return val+num1+num2;},},//vue实例创建前beforeCreate:function(){console.group('beforeCreate 创建前状态===============》'); //console的分组打印console.log("%c%s", "color:red","el     : " + this.$el); //输出undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //输出undefinedconsole.log("%c%s", "color:red","testMsg: " + this.testMsg);//输出undefinedconsole.log("%c%s", "color:red","testNum: " + this.testNum);//输出undefinedconsole.groupEnd(); },//vue实例创建完成,可以进行data对象中数据操作,一般获取初始化数据created:function(){console.group('created 创建完成状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //输出undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //输出[Object Object] ,初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//输出:"原始值",初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//输出:6,可以computed计算console.groupEnd(); },//vue实例挂载前,不能获取$el元素,生成的虚拟dombeforeMount:function(){console.group('beforeMount 挂载前状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //undefinedconsole.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //无输出,dom未生成console.groupEnd(); },//mounted:function(){console.group('mounted 挂载完成的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //输出[object HTMLDivElement],初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //输出6,初始化成功console.groupEnd(); },//更改data对象中数据后,页面渲染新数据前的状态beforeUpdate:function(){console.group('beforeUpdate 更新前的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); //初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //初始化成功console.groupEnd(); },//数据更改后并重新渲染后,dom也重新更新了updated:function(){console.group('updated 更新完成的状态==========');console.log("%c%s", "color:red","el     : " + this.$el); //初始化成功console.log("%c%s", "color:red","data   : " + this.$data); //初始化成功console.log("%c%s", "color:red","testMsg: " + this.testMsg);//初始化成功console.log("%c%s", "color:red","testNum: " + this.testNum);//初始化成功console.log($("#testNum").text());  //初始化成功console.groupEnd(); },//销毁前beforeDestroy:function(){console.group('beforeDestroy 销毁前的状态');console.log("%c%s", "color:red","el     : " + this.$el); console.log("%c%s", "color:red","data   : " + this.$data); console.log("%c%s", "color:red","testMsg: " + this.testMsg);console.log("%c%s", "color:red","testNum: " + this.testNum);console.log($("#testNum").text());  console.groupEnd(); },//销毁后修改data数据无效,生成的dom依旧存在destroyed(){console.group('destroyed 销毁完成的状态===============》');console.log("%c%s", "color:red","el     : " + this.$el); console.log("%c%s", "color:red","data   : " + this.$data); console.log("%c%s", "color:red","testMsg: " + this.testMsg);console.log("%c%s", "color:red","testNum: " + this.testNum);console.log($("#testNum").text());  console.groupEnd(); },}
</script>

vue生命周期详解、钩子函数的调用(简单易懂)相关推荐

  1. vue 生命周期 详解

    详解Vue Lifecycle 先来看看vue官网对vue生命周期的介绍 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,我们称 ...

  2. 1.vue生命周期详解(2020.12.05)

    vue生命周期,直接上官方图 补一下引用vue的链接( src = "https://cdn.bootcss.com/vue/2.4.2/vue.js) 要明确生命周期,我们必须从钩子下手: ...

  3. vue 生命周期详解 (附代码)

    一. vue的生命周期是什么 vue每个组件都是独立的,都有自己的生命周期,从一个组件创建.数据初始化.挂载.更新.销毁,就是一个组件的生命周期. 一个组件首次加载时,也就只执行 创建.数据初始化到挂 ...

  4. Vue系列之vue生命周期详解

    文章の目录 1.什么是 vue 生命周期 2.生命周期钩子函数 2.1.beforeCreate(创建前) 2.2.created(创建后) 2.3.beforeMount(挂载前) 2.4.moun ...

  5. 【Vue】 Vue生命周期详解

    每一个vue实例从创建到销毁的过程,就是这个vue实例的生命周期.在这个过程中,它经历了从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程. 通过这张流程图已经可以清晰的 ...

  6. Vue生命周期详解(图解)

    程序员学习必备书籍推荐: 首先我们对Vue生命周期官方给出的图进行详细解释 vue生命周期详细图解 什么是生命周期? 简而言之:从生到死的过程,从Vue实例创建-运行-销毁的过程 Vue实例有一个完整 ...

  7. 【Vue生命周期详解】

    细谈Vue声明周期 什么是生命周期? Vue的生命周期 beforeCreate( 创建前 ): created ( 创建后 ): beforeMount: mounted: beforeUpdate ...

  8. Vue生命周期详解 对应代码解析

    -使用GitHub阅览 对于Vue的实例,比如 const app = new Vue({...}) 浏览器解析到这段代码的时候,自动执行beforeCreate => created => ...

  9. 一次性搞懂Vue生命周期的八大钩子函数

    何为钩子函数?先看官方文档的说法: 每个 Vue 实例在被创建时都要经过一系列的初始化过程--例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也 ...

最新文章

  1. C++_IO类型_文件输入输出流_字符串流
  2. 如何计算出int的数据范围
  3. idea 导入template_如何将静态导入添加到IntelliJ IDEA实时模板
  4. android颜色表
  5. 操作系统中阻塞和挂起的区别和联系
  6. 这几道Redis面试题都不懂,怎么拿到阿里后端offer?
  7. window.location.href不打开新窗口_在使用网站时,什么情况该用新窗口打开?
  8. 社交APP软件开发流程解析
  9. bash脚本运行报错问题原因及解决方法
  10. NOIP2016普及组复赛全国一等奖名单及排名(续表_919~1419名)
  11. 冰桶挑战”的火爆程度与朋友圈?
  12. nyoj 366 D的小L(数的全排)
  13. 2020移动apn接入点哪个快_手机WiFi网速度太慢?教你一招网速翻倍好用,比5G还快...
  14. CAD如何附着外部参照图?
  15. 玲珑学院 1127 咸鱼文章
  16. 几种软件开发方法对比
  17. Linux c 目录操作函数scandir
  18. SSM校园好货APP的设计与实现毕业设计源码121619
  19. 基于DEM的降雨淹没算法
  20. solidworks基础--移动、复制与拉伸

热门文章

  1. 软件测试员对英语,软件测试工程师英语面试题
  2. 迷你世界电锯机器人_迷你世界:生产果冻的机器人,1分钟产出500个,10种口味随意挑选...
  3. python数值类型_Python数值类型
  4. Java类class isMemberClass()方法及示例
  5. dfs文件服务器访问权限,fastDFS 文件服务器访问
  6. oracle asm 删除diskgroup,ASM磁盘组删除DISK操作
  7. linux中系统修复
  8. 关于java中锁的面试题_Java面试题-Java中的锁
  9. 计算机图形学图形旋转_计算机图形学翻译
  10. haskell程序设计语言