笔记-Vue生命周期

112 阅读3分钟

什么是生命周期

  • 从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件被统称为生命周期。
  • 生命周期钩子 = 生命周期函数 = 生命周期事件

生命周期分类

创建期间的生命周期函数

  • beforeCreate:实例刚在内存中被创建出来,此时还没有初始化data和methods属性
  • created:实例已经在内存中创建好,此时data和methods已经创建好了,但此时还没有开始编译模板
  • beforeMount:此时已经完成了模板的编译,但还没有挂载到页面中
  • mounted:此时已经将编译好的模板挂载到了页面指定的容器中显示

运行期间的生命周期函数

  • beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为还没有开始重新渲染DOM节点
  • updated:实例更新更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据都已经完成了更新,界面也已经被重新渲染好了

销毁期间的生命周期函数

  • beforeDestroy:实例销毁之前调用此函数,在这一步,实例仍然完全可用
  • destroyed:Vue实例销毁后调用此函数,调用后实例指示的所有东西全部都会解除绑定,所有的事件监听都会被移除,所有的子实例也会被销毁
var vm = new Vue({
    el: '#app',
    data: {
        msg:'ok'
    },
    methods: {
        show(){
            console.log('执行了show方法')
        }
    },

    beforeCreate(){     //这是我们遇到的第一个生命周期函数 表示实例完全被创建出来之前 会执行它
        // console.log(this.msg)
        // this.show()
        //说明在beforeCreate周期函数执行时 data和methods中的数据都还没有初始化
    },
    
    created(){     //这是我们遇到的第二个生命周期函数
        // console.log(this.msg)
        // this.show()
        //说明在create周期函数执行时 data和methods中的数据都初始化完成了
        //如果要调用methods中的方法或者操作data中的数据  最早只能在created中去操作
    },
    
    beforeMount(){      //第三个生命周期函数
        // console.log(document.getElementById('h3').innerText)
        //表示模板已经在内存中编译完成 但尚未把模板渲染到页面中去
        //在beforeMount执行时 页面中的元素还没有被真正替换过来
    },
    
    mounted(){      //第四个生命周期函数
        // console.log(document.getElementById('h3').innerText)
        //在beforeMount执行时 把内存中编译好的模板渲染到页面中
        //mounted是实例创建期间的最后一个生命周期函数 当执行完mounted后 就表示实例已经被完全创建好了 
    },
    
    //运行中的两个事件
    beforeUpdate(){ 
        // console.log('界面上元素的内容:'+document.getElementById('h3').innerText)
        // console.log('data中msg的数据:'+this.msg)
        //当执行beforeUpdate时 data数据是最新的 但是页面尚未同步
    },

    updated(){
        console.log('界面上元素的内容:'+document.getElementById('h3').innerText)
        console.log('data中msg的数据:'+this.msg)
        //根据data中的最新数据在内存中更新DOM树,并且重新渲染到页面中去
        //updated执行时 页面和data数据已经保持同步了
    },

    beforeDestroy(){
        //当执行beforeDestroy钩子函数时 Vue实例就进入到了销毁阶段
        //但是实例上的data和methods等等都处于可用状态
    },

    destroyed(){
        //当执行destroy时 Vue实例所有的数据都不可用了
    }
})