• vue生命周期


    vue生命周期

     生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue实例;
    在创建实例过程中,需要设置数据监听,编译模板,将实例挂载到DOM上,数据更新能够让DOM也更新,
    在这个初始化,又会不同阶段默认调用一些函数执行,这些函数就是生命周期的钩子函数;

    生命周期钩子函数

    生命周期钩子函数,让够让咱们在初始化实例时,添加自己的代码;
    生命周期的钩子函数中的this,会默认指向vue的实例;

    钩子函数

    beforeCreate created   可以获取数据及方法
    beforeMount mounted    可以获取到真实的DOM
    beforeUpdate updated     数据更新执行
    beforeDestroy destroyed    销毁vue实例,不再具有双向数据绑定的特点

    Vue的八大生命周期钩子函数 

    区别之一:执行顺序的问题 beforeCreate>created>beforeMount>mounted 

    1. // js部分
    2. "app">
    3.         <h1>{{msg}}h1>
    4.         <button @click="change">改变msgbutton>
    5.         <button @click="destroy">销毁Vue实例button>
    6.         <h1>{{time}}h1>
    7.    
    1. beforeCreate:Vue实例化对象创建之前,实例化对象创建之前是获取不到data里面的数据的
    1. //Vue实例化对象创建之前
    2. // 最先执行的生命周期
    3. beforeCreate() {
    4. console.log("Vue实例化对象创建之前");//Vue实例化对象创建之前
    5. console.log(this.msg); // undefined
    6. },

     created:Vue实例化对象创建之后,实例化对象创建之后可以获取data里面的数据 

                    实例化对象创建之后不可以获取到dom包括根节点

                 ★一般在created里面调用接口把接口里面的数据赋值给到Vue的data中

    1.   /* Vue实例化对象创建之后 */
    2.             created() {
    3.                 /* 实例化对象创建之后可以获取data里面的数据 */
    4.                 /* 实例化对象创建之后不可以获取到dom包括根节点 */
    5.                 console.log('created',this.msg,this.$el)
    6.                 /* ★一般在created里面调用接口把接口里面的数据赋值给到Vue的data中 */
    7.                 // this.timeId = setInterval(()=>{
    8.                 //     this.time++;
    9.                 //     console.log(this.time)
    10.                 // },500)
    11.             },

    beforeMount:Vue的dom挂载之前,beforeMount可以获取到节点,但是不能把data中的数据渲染在dom节点中

    1. beforeMount() {
    2.                 /* dom挂载之前可以获取到根节点 */
    3.                 /* beforeMount还没有把data中的数据渲染到dom节点上 */
    4.                 console.log('beforeMount',this.$el)
    5.             },

    mounted:Vue的dom挂载之后,mounted已经把data中的数据渲染到了dom节点上

                   ★一般在获取dom节点操作要放在mounted中执行,例如echarts中获取根元素

    1. /* Vue的dom挂载之后 */
    2.             mounted() {
    3.                 /* mounted已经把data中的数据渲染到了dom节点上 */
    4.                 console.log('mounted',this.$el)
    5.                 /* ★一般在获取dom节点操作要放在mounted中执行,例如echarts中获取根元素 */
    6.             },

     beforeUpdate: Vue的data值更新前,当我把Vue实例中的data中的值改变了会触发                 beforeUpdate 和updated,顺序上 beforeUpdate执行顺序优先于updated

    1.   /* Vue的data值更新前 */
    2.             /* 当我把Vue实例中的data中的值改变了会触发beforeUpdate和updated */
    3.             /* 顺序上 beforeUpdate执行顺序优先于updated  */
    4.             beforeUpdate() {
    5.                 console.log('beforeUpdate',this.msg,this.$el)
    6.             },

    updated:Vue的data值更新后

    1.   updated() {
    2.                 console.log('updated',this.msg,this.$el)
    3.             },

    beforeDestroy:Vue组件销毁前,在调用$destroy()方法的时候 会执行下面的两个钩子函数

                              执行顺序上beforeDestroy优先于destroyed执行

                            ★beforeDestroy和destroyed的一个使用场景是在销毁定时器节约内存的时候都可    以使用

    1.   /* Vue组件销毁前 */
    2.             /* 在调用$destroy()方法的时候 会执行下面的两个钩子函数 */
    3.             /* 执行顺序上beforeDestroy优先于destroyed执行  */
    4.             /* ★beforeDestroy和destroyed的一个使用场景是在销毁定时器节约内存的时候都可以使用 */
    5.             beforeDestroy() {
    6.                 console.log('beforeDestroy',this.msg,this.$el)
    7.             },

    destroyed:Vue组件销毁后

    1. destroyed() {
    2.                 console.log('destroyed',this.msg,this.$el)
    3.                 clearInterval(this.timeId)
    4.             },

    整体代码:

    1. "app">
    2.         <h1>{{msg}}h1>
    3.         <button @click="change">改变msgbutton>
    4.         <button @click="destroy">销毁Vue实例button>
    5.         <h1>{{time}}h1>
    6.    
  •     <script src="./node_modules/vue/dist/vue.min.js">script>
  •     <script>
  •         /* Vue的八大生命周期钩子函数 */
  •         /* 区别之一:执行顺序的问题 beforeCreate>created>beforeMount>mounted */
  •         new Vue({
  •             el:"#app",
  •             data:{
  •                 msg:'我爱Vue',
  •                 time:0,
  •                 timeId:null
  •             },
  •             /* Vue实例化对象创建之前 */
  •             beforeCreate() {
  •                 /* 实例化对象创建之前是获取不到data里面的数据的 */
  •                 console.log('beforeCreate',this.msg)
  •             },
  •             /* Vue实例化对象创建之后 */
  •             created() {
  •                 /* 实例化对象创建之后可以获取data里面的数据 */
  •                 /* 实例化对象创建之后不可以获取到dom包括根节点 */
  •                 console.log('created',this.msg,this.$el)
  •                 /* ★一般在created里面调用接口把接口里面的数据赋值给到Vue的data中 */
  •                 // this.timeId = setInterval(()=>{
  •                 //     this.time++;
  •                 //     console.log(this.time)
  •                 // },500)
  •             },
  •             /* Vue的dom挂载之前 */
  •             beforeMount() {
  •                 /* dom挂载之前可以获取到根节点 */
  •                 /* beforeMount还没有把data中的数据渲染到dom节点上 */
  •                 console.log('beforeMount',this.$el)
  •             },
  •             /* Vue的dom挂载之后 */
  •             mounted() {
  •                 /* mounted已经把data中的数据渲染到了dom节点上 */
  •                 console.log('mounted',this.$el)
  •                 /* ★一般在获取dom节点操作要放在mounted中执行,例如echarts中获取根元素 */
  •             },
  •             /* Vue的data值更新前 */
  •             /* 当我把Vue实例中的data中的值改变了会触发beforeUpdate和updated */
  •             /* 顺序上 beforeUpdate执行顺序优先于updated  */
  •             beforeUpdate() {
  •                 console.log('beforeUpdate',this.msg,this.$el)
  •             },
  •             /* Vue的data值更新后 */
  •             updated() {
  •                 console.log('updated',this.msg,this.$el)
  •             },
  •             /* Vue组件销毁前 */
  •             /* 在调用$destroy()方法的时候 会执行下面的两个钩子函数 */
  •             /* 执行顺序上beforeDestroy优先于destroyed执行  */
  •             /* ★beforeDestroy和destroyed的一个使用场景是在销毁定时器节约内存的时候都可以使用 */
  •             beforeDestroy() {
  •                 console.log('beforeDestroy',this.msg,this.$el)
  •             },
  •             /* Vue组件销毁后 */
  •             destroyed() {
  •                 console.log('destroyed',this.msg,this.$el)
  •                 clearInterval(this.timeId)
  •             },
  •             methods: {
  •                 change(){
  •                     this.msg = '我爱React'
  •                 },
  •                 destroy(){
  •                     this.$destroy();
  •                 }
  •             },
  •         })
  •     script>
  • 相关阅读:
    卫星位姿的相关概念
    《C++设计模式》——结构型
    【IEEE出版顺利申请中】2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024)
    顺为资本许达来:判断风口一看时间点,二看商业本质
    用餐高峰期,排队现象严重?食堂多元化升级改造
    sql注入
    大厂面试题-索引有哪些缺点以及具体有哪些索引类型
    LeetCode117. Populating Next Right Pointers in Each Node II
    Java中的高级特性与最佳实践
    RPA机器人在电商领域有哪些应用?
  • 原文地址:https://blog.csdn.net/m0_62168050/article/details/126054835