- 什么是生命周期:从VUE实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期
- 生命周期钩子:就是生命周期事件的别名而已
- 生命周期钩子=生命周期函数=生命周期事件
- 主要的生命周期函数分类:
- 创建期间的生命周期函数:
1)beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好data和methods属性
2)created:实例已经在内存中创建好,此时data和methods也已经创建好,此时还没有开始编译模板
3)beforeMount:此时已经在内存中完成了模板的编译,但是还没有渲染到页面中
4)mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示,到此,实例就已经被完全的创建好了 - 运行期间的生命周期函数:
1)beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
2)updated:实例更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了 - 销毁期间的生命周期函数:
1)beforeDestory:实例销毁之前调用,在这一步,实例仍然完全可用,还没有执行真正的销毁过程
2)destroyed:Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 -
生命周期流程图
lifecycle.png - 生命周期流程函数演示代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>生命周期函数演示</title> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </head> <body> <div id="app"> <div id="msg">{{ msg }}</div> <input type="button" value="change" @click="changeMsg()"> </div> <script> var vm = new Vue({ el:"#app", data: { msg : 'hello' }, methods:{ sayHi(){ console.log("hi, vue!!") }, changeMsg(){ this.msg = 'bye' } }, beforeCreate: function(){ //data和methods还没有构建初始化好 // console.log(this.msg) //异常无法正常调用 // this.sayHi() // 异常 无法正常调用 }, created(){ //vue 在内存中创建好了 // console.log(this.msg) //可以正常调用 // this.sayHi() // 可以正常调用 }, beforeMount(){//编译好模板前 // console.log(document.getElementById("msg").innerText) //无法正常获取,还没有编译模板 }, mounted(){//已经编译好模板,vue实例就已经被完全的创建好了 // console.log(document.getElementById("msg").innerText) //能够正常显示, }, beforeUpdate(){ //状态更新之前执行此函数 // console.log(this.msg) //点修button调用changeMsg方法后,vm对象中的msg为新数据 // console.log(document.getElementById("msg").innerText) ////点修button调用changeMsg方法后,页面上显示数据还是老数据 }, updated(){//状态更新之后执行此函数 // console.log(this.msg) //点修button调用changeMsg方法后,vm对象中的msg为新数据 // console.log(document.getElementById("msg").innerText) ////点修button调用changeMsg方法后,页面上显示数据改为新数据 }, beforeDestory(){ //实例销毁前,实例中的所有数据和方法依然是可用的状态 //不好演示 }, destroyed(){ //实例完全被销毁后调用,实例中的所有数据和方法已经是不可用的状态 //不好演示 } }) </script> </body> </html>
- 创建期间的生命周期函数:
网友评论