每个vue实例从创建到销毁的过程就是vue的一个生命周期,每个阶段都有对应的钩子函数,当我们想在vue的不同时期操作vue实例是,就可以在不同的钩子函数中进行

vue有8种生命周期函数:

beforeCreate(实例创建前)

  • 这个时候this还不能使用,data中的数据、methods中的方法,以及watcher中的事件都不能获得。
var vm = new Vue({el: '#app',data: {message: '今天是周一!!!'},beforeCreate(){console.group('beforeCreate 创建前状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //undefinedconsole.log("%c%s", "color:red", "data   : "+this.$data); //undefinedconsole.log("%c%s", "color:red", "message: "+this.message);   //undefined},

created(实例创建后)

  • 这个时候可以操作vue中的数据和方法,但是还不能对dom节点进行操作。
//...created(){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", "message: "+this.message);   //今天是周一!!!},
//...

beforeMoute(元素挂载前)

  • $el属性已存在,是虚拟dom,只是数据未挂载到模板中。
//...beforeMount(){console.group('beforeMount 挂载前状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天是周一!!!},
//...

mouted(元素挂载后)

  • 数据和dom都完成挂载,在上一个周期占位的数据把值渲染进去,一般请求会放在这个地方,因为这边请求改变数据之后刚好能渲染
  • 注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick替换掉 mounted
//...mounted(){console.group('mounted 挂载结束状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);  console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天是周一!!!},
//...

beforeUpdate(实例更新前)

  • 点击页面中的元素执行相应的事件,并触发beforeUpdate和updated钩子函数 只要是页面数据改变了都会触发,数据更新之前,页面数据还是原来的数据,当你请求赋值一个数据的时候就会执行这个周期,如果没有数据改变不执行。
//...beforeUpdate(){console.group('beforeUpdate 更新前状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);console.log(this.$el.innerHTML);    //<p>今天是周一!!!</p>console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天周二了!!!},
//...

updated(实例更新后)

  • 只要是页面数据改变了都会触发,数据更新完毕,页面的数据是更新完成的,beforeUpdated和updated要谨慎使用,因为页面更新数据的时候都会触发,在这里操作数据很影响性能和死循环。
  • 注意 updated 不会承诺所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以用 vm.$nextTick替换掉 updated:
//...updated(){console.group('updated 更新完成状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);console.log(this.$el.innerHTML);    //<p>今天周二了!!!</p>console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天周二了!!!},
//...

beforeDestory(实例销毁前)

  • 实例销毁之前调用,在这一步,实例仍然完全可用。
  • 注意:细心的小伙伴会发现beforeUpdate和updated钩子函数中的e l 一 样 , 根 据 官 方 理 解 beforeUpdate应该指向虚拟dom , 所以才会一样 , 而dom中的真正内容不一样 ,
  • 但是beforeMount和mouted钩 子函数中为什么又会有区别呢 ?
  • 感觉是设计的不足之处。执行vm.destroy()函数触发beforeDestroy和destoryed钩子函数
//...beforeDestroy(){console.group('beforeDestroy 销毁前状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天周二了!!!},
//...

destory(实例销毁后)

  • vue实例销毁后调用,调用后,Vue实例指示的所有内容都会解除绑定,所有的事件监听器都会被移除,所有的子实例也会被销毁。
  • 执行destroy方法后,对data的改变不会再触发周期函数,此时的vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在。
//...destroyed(){console.group('destroyed 销毁完成状态==========>>');console.log("%c%s", "color:red", "el     : "+this.$el);   //[object HTMLDivElement]console.log(this.$el);console.log("%c%s", "color:red", "data   : "+this.$data); //[object Object]console.log("%c%s", "color:red", "message: "+this.message);   //今天周二了!!!},
//...

总结:

  • beforecreate:可以在这加个loading事件
  • created :在这结束loading,还做一些初始化,实现函数自执行
  • mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情
  • beforeDestory: 你确认删除vue实例了吗?
  • destoryed :当前实例已被销毁,解绑相关指令和事件监听器

重点:

父子组件嵌套时触发钩子函数顺序
1.组件挂载阶段

  • 父组件beforeCreate=>>父组件created=>>父组件beforeMount=>>子组件beforeCreate=>>子组件created=>>子组件beforeMount=>>子组件mounted=>>父组件mounted
  • 即从创建到挂载,是从外到内,再从内到外

2.组件更新阶段

  • 父组件beforeUpdate=>>父组件updated

3.组件销毁阶段

  • 父组件beforeDestroy=>>子组件beforeDestroy=>>子组件destroyed父组件destroyed
  • 即销毁是从外到内,再从内到外

以下为简单粗暴的答案  直接走起:
答: 总共分为8个阶段。创建前/后,载入前/后,更新前/后,销毁前/后。

创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象 data 都为undefined,还未初始化。在 created阶段,vue实例的数据对象data有了,$el还没有。

载入前/后: 在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。

更新前/后: 当data变化时,会触发beforeUpdate和updated方法。

销毁前/后: 在destroy阶段,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在。destroyed阶段,组件销毁

vue生命周期钩子函数有哪些相关推荐

  1. vue生命周期钩子函数的正确使用方式

    对于vue生命周期我们还是要先了解清楚,因为不同的生命期用不同的钩子函数,先上图: 遇到的一个问题 在我的项目中,常用的生命周期钩子函数一直都是mounted,对于大部分情况,都是屡试不爽.捷报频传~ ...

  2. Vue生命周期钩子函数理解与使用场景

    Vue生命周期钩子函数 每个 Vue 实例在被创建时都要经过一系列的初始化过程--例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫 ...

  3. Vue生命周期钩子函数的使用以及应用场景

    文章目录 前言 钩子函数介绍 beforeCreate(创建前) created(创建后) beforeMounted(挂载前) mounted(挂载后) beforeUpdate(更新前) upda ...

  4. vue生命周期 钩子函数

    vue实例的生命周期:从创建到销毁的整个过程 1.钩子函数 vue框架内置函数,随着组件的生命周期阶段,自动执行 使用钩子函数 可以知道vue生命周期到达了什么阶段 作用:在特定的时间点执行特定的操作 ...

  5. 史上最全的Vue生命周期钩子函数11个

    什么是生命周期? 生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue实例: 在创建实例过程中,需要设置数据监听,编译模板,将实例挂载到DOM上,数据更新能够让DOM也更新,在这 ...

  6. 说一下vue生命周期钩子函数有哪些,分别什么时候触发

    vue生命周期即为一个组件从出生到死亡的一个完整周期,主要包括以下4个阶段:创建,挂载,更新,销毁 创建前:beforeCreate,  创建后:created 挂载前:beforeMount,  挂 ...

  7. Vue08/Vue 生命周期钩子函数( Vue生命周期11个阶段 )应用场景

    Vue生命周期 Vue生命周期介绍 Vue生命周期是指Vue实列对象从创建之初到销毁的过程 一. Vue生命周期11个阶段 创建 beforeCreate  //数据初始化前 created      ...

  8. vue生命周期钩子函数(11个)

    首先来一波官网的对于vue生命周期的图解. 这一张图对于vue的生命周期已经讲解的特别详细了,但是光靠这一张图还不足于了解它的生命周期,我们需要实践一下,介绍一下vue的钩子函数. 一. 组件创建前后 ...

  9. vue生命周期钩子函数为什么不能使用箭头函数

    来自vue官方文档的解释: 所有生命周期钩子的 this 上下文将自动绑定至实例中,因此你可以访问 data.computed 和 methods.这意味着你不应该使用箭头函数来定义一个生命周期方法 ...

最新文章

  1. LabVIEW基础培训
  2. VS生成时复制文件到指定目录
  3. 意念控制成现实:不开口,不动手,“瘫着”就能打游戏
  4. 网络学习(十二)文本模式安装Red Hat Linux 9
  5. 浅谈socket网络编程函数参数(二)
  6. 一语点破Java中的静态static关键字
  7. CentOS6下Xen 4.1的安装(编译linux3.0内核)
  8. Comparable和Comparator接口是干什么的?列出它们的区别。
  9. QuickLook 空格键预览文件工具
  10. iconv命令的使用,解决libxml2中解释中文失败的问题
  11. 简单聊一下const
  12. python cad模块_Pycad: Python Extension for AutoCad
  13. 上传照片显示服务器繁忙怎么回事,为什么每次上传照片时都发生网络错误
  14. 2. Vue prevent修饰符
  15. 小孩孩子应用题计算机错误,为什么一二年级的孩子数学应用题总出错?家长该怎么办?...
  16. 电商网站产品结构数据库设计
  17. 最新电脑cpu性能排行服务器,服务器cpu性能如何 服务器cpu性能排行榜介绍【详解】...
  18. linux连接蓝牙设备,Linux 下连接蓝牙设备
  19. 真的不明白,怎么会这样!
  20. ppt流程图字体太小_【PPT】几种处理字体的小方法,让PPT中的字体更好看

热门文章

  1. 如何做好建筑行业的信息化建设?
  2. SpringBoot整合Javamail实现邮件发送
  3. Python time time()方法-菜鸟教程
  4. 使用UE5和Blender实现您的游戏关卡设计视频教程
  5. java版MC城市地图
  6. Intellij IDEA安装golang插件
  7. 世界顶级杀毒软件排行(Toptennews)
  8. 主流杀毒软件引擎分析
  9. docker-compose安装及前后端项目部署
  10. 计算机模拟风洞,Dlubal RWIND Simulation Pro 1.2 - 风荷载模拟 (风洞)软件