📖Vue 生命周期理解
前言
本文是我自己对 Vue 生命周期的理解与整理,如有错误请指正
上图为个人理解,并将生命周期划分为三部分:
1:在内存中创建 Vue 实例,并初始化 methods 与 data
2:在内存中创建 DOM 并挂载到前端页面中
3:组件运行阶段与销毁阶段
在创建 Vue 实例的过程中,会按照流程触发生命周期函数,下面开始讲解创建流程中会执行的生命周期函数
生命周期函数
beforeCreate
在 beforeCreata 生命周期函数中 data 与 methods 中的数据都还未初始化,所以显示undefined
created
在 created 生命周期函数中 data 与 methods 才被初始化,如果需要调用 methods 中的方法或者 data 中数据,最早可以在 created 中进行
beforeMount
在 beforemount 生命周期函数中,页面模型在内存中已经创建完成,但是未渲染到前端页面中所以调用出原始 HTML 内容
mounted
当执行到 mounted 生命周期函数时,代表实例已经创建完成,可以进行一些基本的操作
beforeUpdate
beforeUpdate 生命周期函数代表 data 中的对象发生改变,此时内存中相对应的值已经发生改变,但是未渲染到前端页面中
updated
updated 生命周期函数代表 data 中的对象发生改变,data 的值已经渲染到前端页面中
销毁
这里我们创建了一个子组件,并对该子组件的销毁生命周期函数进行修改
这里我们创建了一个子组件,并添加一个销毁按钮对子组件进行销毁处理,可见在进行销毁时 beforeDestroy 与 destroyed 都可以在次调用其组件的对象,但是非常不建议在 destroyed 中操作组件对象,大部分的项目需要销毁前执行的函数都放在 beforeDestroy 中即销毁前处理,如清除定时器这类操作
项目总代码
<!DOCTYPE html> <html> <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> <head> <meta charset="utf-8"> <title>Vue 生命周期</title> </head> <body> <div id="app"> <p id="app_p">{{msg}}</p> <one v-if="fal"></one> <input type="button" name="" @click='msg="NO"' value='点击'> <input type="button" name="" value="销毁" @click='chang'> </div> <template id="one"> <div> <p>{{onep}}</p> </div> </template> <script type="text/javascript"> Vue.component("one",{ template:"#one", data(){ return { onep:"我是组件的内容" } }, beforeDestroy(){ console.log("组件销毁前输出内容:"+this.onep); }, destroyed(){ console.log("组件销毁后:"+this.onep); } }) new Vue({ el:'#app', data:{ msg:'OK', fal:true }, methods:{ show(){ console.log('执行了'); }, chang(){ this.fal = !this.fal } }, beforeCreate(){ console.log(this.msg); //在 beforeCreata 生命周期函数中 data 与 methods 中的数据都还未初始化,所以调用不出来 }, created(){ //console.log(this.msg); //this.show(); //在 created 生命周期函数中 data 与 methods 才被初始化,如果需要调用 methods 中的方法或者 data 中数据,最早可以在 created 中进行 }, beforeMount(){ //console.log(document.getElementById('app_p').innerHTML); //在 beforemount 生命周期函数中,页面模型在内存中已经创建完成,但是未渲染到页面中所以调用不出来 }, mounted(){ //console.log(document.getElementById('app_p').innerHTML); //将内存中页面模型渲染到实例页面中 //当执行到 mounted 生命周期函数时,代表实例已经创建完成 }, beforeUpdate(){ //console.log("页面上的数据为:"+document.getElementById('app_p').innerHTML); //console.log("内存中的数据为:"+this.msg) }, updated(){ //console.log("页面上的数据为:"+document.getElementById('app_p').innerHTML); //console.log("内存中的数据为:"+this.msg) }, }) </script> </body> </html>
🧐发表评论