zoukankan      html  css  js  c++  java
  • vue 学前班003(生命周期)

    ue把整个生命周期划分为创建、挂载、更新、销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作。学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们的业务代码。

    我们分别来看看这几个阶段:

    1. beforeCreate

    此阶段为实例初始化之后,此时的数据观察和事件配置都没好准备好。

    我们试着console一下实例的数据data和挂载元素el,代码如下:

      <div id="app">{{name}}</div>
      <script>
        let app = new Vue({
          el:"#app",
            data:{
             name:"前端"
          },
          beforeCreate(){
             console.log('即将创建');
             console.log(this.$data);
             console.log(this.$el);
          }
        });
     </script>
    

     

    得到的结果是:

     

    此时的实例中的datael还是undefined,不可用的。

    2. created

    beforeCreate之后紧接着的钩子就是创建完毕created,我们同样打印一下数据data和挂载元素el,看会得到什么?

    在上一段代码的基础上,加上下面这段代码:

     created(){
        console.log('创建完毕');
        console.log(this.$data);
        console.log(this.$el);
     }
     
    

      

    我们看到打印的结果:

     

    此时,我们能读取到数据data的值,但是DOM还没生成,所以属性el还不存在,输出$data为一个Object对象,而$el的值为undefined。

    3. beforeMount

    上一个阶段我们知道DOM还没生成,属性el还为undefined,那么,此阶段为即将挂载,我们打印一下此时的$el是什么?

    增加一下代码:

     beforeMount(){
        console.log('即将挂载');
        console.log(this.$el);
     }
    

     

    此时的$el不再是undefined,而是成功关联到我们指定的dom节点<div id=”app”></div>,但此时{{ name }}还没有被成功地渲染成我们data中的数据。没事,我们接着往下看。

    4. mounted

    mounted也就是挂载完毕阶段,到了这个阶段,数据就会被成功渲染出来,我们编写mounted的钩子,打印$el 看看:

     mounted(){
        console.log('挂载完毕');
        console.log(this.$el);
     }
     
    

     

    打印结果:

           挂载完毕

    如我们所愿,此时打印属性el,我们看到{{ name }}已经成功渲染成我们data.name的值:“前端”。

    5. beforeUpdate

    我们知道,当修改vue实例的data时,vue就会自动帮我们更新渲染视图,在这个过程中,vue提供了beforeUpdate的钩子给我们,在检测到我们要修改数据的时候,更新渲染视图之前就会触发钩子beforeUpdate。

    html片段代码我们加上ref属性,用于获取DOM元素(后期会讲到)。

     <div ref="app" id="app">
        {{name}}
     </div>
    

      

     Vue实例代码加上beforeUpdate钩子代码:

     
     beforeUpdate(){
      console.log('=即将更新渲染=');
      let name = this.$refs.app.innerHTML;
      console.log('name:'+name);
     },

    我们在控制台把app.name的值从原来的 “前端君” 修改成 “web前端教程”,在更新视图之前beforeUpdate打印视图上的值,结果依然为原来的值:“前端君”,表明在此阶段,视图并未重新渲染更新

    6. updated

    此阶段为更新渲染视图之后,此时再读取视图上的内容,已经是最新的内容,接着上面的案例,我们添加钩子updated的代码,如下:

     updated(){
      console.log('==更新成功==');
      let name = this.$refs.app.innerHTML;
      console.log('name:'+name);
     }
    

      

    大家注意两个不同阶段打印的name的值是不一样,updated阶段打印出来的name已经是最新的值:“web前端教程”,说明此刻视图已经更新了。

    7. beforeDestroy

    调用实例的destroy( )方法可以销毁当前的组件,在销毁前,会触发beforeDestroy钩子。

    8. destroyed

    成功销毁之后,会触发destroyed钩子,此时该实例与其他实例的关联已经被清除,它与视图之间也被解绑。

    案例:我们通过在销毁前通过控制台修改实例的name,和销毁之后再次修改,看看情况。

     beforeDestroy(){
       console.log('销毁之前');
     },
     destroyed(){
       console.log('销毁成功');
     }
     
    

      

    
    
    

    销毁之前,修改name的值,可以成功修改视图显示的内容为:“更新视图”,一旦效用实例的$destroy( )方法销毁之后,实例与视图的关系解绑,再修改name的值,已于事无补,视图再也不会更新了,说明实例成功被销毁了。

    9. actived

    keep-alive组件被激活的时候调用。

    10. deactivated

    keep-alive 组件停用时调用。

    关于keep-alive组件的激活和停用,我们后面讲到具体案例再介绍,在这里你只需要知道vue提供了keep-alive组件激活和停用的钩子就可以了。

    本节小结

    掌握实例生命周期的8个阶段:

     

  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/ysshuai/p/7094265.html
Copyright © 2011-2022 走看看