美文网首页
Vue生命周期

Vue生命周期

作者: hhaann | 来源:发表于2019-12-21 02:40 被阅读0次

    在 Vue 实例中,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM,便需要使用到生命周期钩子函数。从创建到销毁的过程,就是生命周期。它的生命周期中有多个事件钩子,可以让在控制整个Vue实例的过程时更容易形成好的逻辑。

    列举钩子函数

    beforeCreate

    created

    beforeMount

    mounted

    beforeUpdate

    updated

    beforeDestroy

    destroyed

    errorCaptured

    deactivated

    activated

    共有11个生命周期。

    周期分析

    逐个分析前,先看执行顺序

    <input type="text" v-model="input" placeholder="请输入你想输入的内容">
    <p id="box">{{input}}</p>
    
     data () {
        return {
          input: '',
          number: 123
        }
      },
      //box为DOM元素,this.number为data中的数据
      beforeCreate () {
        var box = document.getElementById('box')
        console.log('beforeCreate---', box, this.number) 
      },
      created () {
        var box = document.getElementById('box')
        console.log('created---', box, this.number)
      },
      beforeMount () {
        var box = document.getElementById('box')
        console.log('beforeMount---', box, this.number)
      },
      mounted () {
        var box = document.getElementById('box')
        console.log('mounted---', box, this.number)
      },
      beforeUpdate () {
        var box = document.getElementById('box')
        console.log('beforeUpdate---', box, this.number)
      },
      updated () {
        var box = document.getElementById('box')
        console.log('updated---', box, this.number)
      }
    

    看其执行打印结果

    当触发 input 框输入内容时,继续执行。最终执行结果图如下

    由此可知执行顺序为:beforeCreate --> created --> beforeMount --> mounted --> beforeUpdate(页面数据变动触发)--> updated
    这是如上七个所列举的钩子函数的执行顺序。继续往下走

    <router-link to="/">跳转</router-link>
    
    beforeDestroy () {
      console.log('beforeDestroy')
    },
    destroyed () {
      console.log('destroyed')
    }
    

    当一加载本页是不会调用 beforeDestroy,destroyed 函数的。当点击跳转后,便会触发两个函数。

    errorCapture
    当捕获一个来自子孙组件的错误时被调用

    最后看官网给出的图.

    lifecycle.png

    逐个分析
    基于执行顺序中所发的图进行分析。

    beforeCreate(创建前):组件刚创建,DOM元素与data中的元素还未初始化,故拿不到dom与data中的数据。

    created(创建后):完成数据观测,可以在此周期中获取数据,并对数据进行渲染。但DOM元素还未加载出来。

    beforeMount(载入前):数据初始化也已经完成,数据的双向绑定还是显示{{}},DOM还未加载完成。但已编译模板,把data里面的数据和模板生成html。

    mounted(载入后):data数据与DOM元素都已加载完成,将上个周期编译好的内容渲染到页面。

    beforeUpdate(更新前):只要是页面数据改变了都会触发。数据更新之前,页面数据还是原来的数据;如果没有数据改变不执行。

    updated(更新后):只要是页面数据改变了都会触发,数据更新完毕,页面的数据是更新完成的。

    beforeDestroy(摧毁前):在路由离开的时候执行。

    destroyed(摧毁后):在实例销毁之后调用。

    errorCaptured:当捕获一个来自子孙组件的错误时被调用。

    activated & deactivated:在keep-alive被包裹的组件的情况下,假设a、b两个页面,当a页面切换到b页面,则触发deactivated;回到a页面,则触发activated周期

    相关文章

      网友评论

          本文标题:Vue生命周期

          本文链接:https://www.haomeiwen.com/subject/yjzinctx.html