Vue的生命周期

一、什么是Vue的生命周期?

        Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载 Dom、渲染→更新→渲染、销毁等一系列过程,我们称这是 Vue 的生命周期。

二、Vue流程图

三、Vue生命周期的步骤

1、beforeCreate(创建前)

        在创建前先进行实例初始化,初始化生命周期、事件,但数据代理还未开始。此时不能获得DOM节点,无法通过vm访问到data中的数据、methods中的方法。

2、created(创建后)

        此时对象data已经存在,此时可以通过vm访问到data中的数据、methods中配置的方法。

3、beforeMount(挂载前)

        created --> beforeMount阶段Vue开始进行模板解析,在内存中生成虚拟DOM,页面还不能显示解析好的内容;当处在beforeMount(挂载前)时,此时页面呈现的时未经Vue编译的DOM结构,所有对DOM的操作最终都不会奏效。

4、mounted(挂载后)

        该阶段页面呈现的是经过Vue编译的DOM,此时对DOM的操作均有效。至此初始化过程结束,一般在此时进行:开启定时器、发送网络请求、订阅消息、绑定自定义事件等初始化操作。实例创建期间的最后一个生命周期函数,当执行完 mounted 就表示,实例已经被完全创建好了,DOM 渲染在 mounted 中就已经完成了。

5、beforeUpdate(更新前)

        当 data 变化时,会触发beforeUpdate方法 ,此时数据是新的,但页面是旧的,即:页面尚未和数据保持。

         beforeUpdate(更新前)-->updated(更新后) 期间会根据新数据生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面更新,即:完成了Model——>View的更新。

6、updated(更新后)

       当 data 变化时,会触发 updated 方法。页面和 data 数据已经保持同步了。

7、beforeDestory(销毁前)

        vm中所有的:data、methods、指令等等,都处于可用状态,马上要执行销毁工作,一般在此阶段:关闭定时器、取消订阅消息、解绑自定义事件等收尾操作。组件销毁之前调用 ,在这一步,实例仍然完全可用。

8、destoryed(销毁后)

        在实例销毁之后调用,调用后,所有的事件监听器均会被移除,所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用。

四、案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<div id="root">
    <!--    <h2>当前n的值是:<span v-text="n"></span></h2>-->
    <!--    <button @click="add">点我n++</button>-->
    <!--    <button @click="bye">点击销毁vm</button>-->
</div>

<script src="./js/vue.js"></script>
<script>
    Vue.config.productionTip = false;
    let vm = new Vue({
        el: '#root',
        template: `
          <div>
          <h2>当前n的值是:<span v-text="n"></span></h2>
          <button @click="add">点我n++</button>
          <button @click="bye">点击销毁vm</button>
          </div>`,
        data() {
            return {
                n: 1
            }
        }, methods: {
            add() {
                console.log("执行了Add函数");
                this.n++;
            },
            bye() {
                console.log("执行了销毁函数");
                this.$destroy();
            }
        }, watch: {
            n() {
                console.log("n变了");
            }
        },
        beforeCreate() {
            console.log("beforeCreate");
            // console.log(this.n);
        },
        created() {
            console.log("created");
            // console.log(this.n);
        }, 
        beforeMount() {
            console.log("beforeMount");
        },
        mounted(){
            console.log("mounted");
        },
        beforeUpdate(){
            console.log("beforeUpdate");
        },
        updated(){
            console.log("updated");
        },
        beforeDestroy(){
            console.log("beforeDestroy");
        },
        destroyed(){
            console.log("destroyed");
        }
    });
</script>
</body>
</html>

结果:

        1、首次加载

   

        2、修改

        3、销毁

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值