Vue生命周期理解

WeiChang Autumn senery

用了一段时间的Vue,当然还处于初级小白,对一些基本的东西还是不太了解,首先应该就说Vue的生命周期(钩子),不明白这个估计在以后会踩好多的坑,所以今天去度娘上搜了好多文章。

1. 话不多说上来先Po一张图

UfOFgA.jpg

2. Lifecycle Hooks

Vue2.0 Description
beforeCreate 组件实例刚被创建,组件属性计算之前,比如data属性
created 组件实例创建完成,属性已经绑定,但DOM还未生成,$el属性还不存在
beforeMount 模板编译/挂载之前
mounted 模板编译/挂载之后
beforeUpdate 组件更新之前,数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
updated 组件更新之后
activated for keep-alive,组件被激活时调用
deactivated for keep-alive,组件被移除时调用
beforeDestory 组件销毁前调用
destoryed 组件销毁后调用

3. 废话不多说Po代码吧!!!

  • 先说创建和挂载如下图 (注意标注)
    <div id="app">
        <span>{{msg}}</span>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                msg: 'this is yuhior Blog'
            },
            beforeCreate: function() {
                console.group('beforeCreate组件实例刚被创建,属性计算前-------->');
                console.log(this.$el);
                console.log(this.$data);
                console.log(this.msg);
            },
            created: function() {
                console.group('created 创建完毕,-------->');
                console.log(this.$el);
                console.log(this.$data);
                console.log(this.msg);
            },
            beforeMount: function() {
                console.group('beforeMount挂载之前-------->');
                console.log(this.$el);
                console.log(this.$data);
                console.log(this.msg);
            },
            mounted: function() {
                console.group('mounted挂载之后-------->');
                console.log(this.$el);
                console.log(this.$data);
                console.log(this.msg);
            },
        })
    </script>

复制代码

avatar

  • 在看组件更新 (这里我们在 chrome console里执行以下命令)
//数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
beforeUpdate: function() {
        console.group('beforeUpdate组件更新前-------->');
        console.log('真实dom结构:' + document.getElementById('app').innerHTML);
        console.log(this.$el);
        console.log(this.$data);
        console.log(this.msg);
    },
updated: function() {
        console.group('updated 更新完成状态-------->');
        console.log('真实dom结构:' + document.getElementById('app').innerHTML);
        console.log(this.$el);
        console.log(this.$data);
        console.log(this.msg);
    },
复制代码
app.msg= '我是更新'; //效果如下
复制代码

avatar

  • 最后就是销毁了
beforeDestory: function() {
        console.group('beforeDestory 组件销毁之前-------->');
        console.log(this.$el);
        console.log(this.$data);
        console.log(this.msg);
    },
destoryed: function() {
        console.group('beforeDestory 组件销毁之后-------->');
        console.log(this.$el);
        console.log(this.$data);
        console.log(this.msg);
    }
复制代码

beforeDestory:实例销毁之前调用。在这一步,实例仍然完全可用。该钩子在服务器端渲染期间不被调用。

destoryed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

注意:vue2.0之后主动调用$destroy()不会移除dom节点,不推荐直接destroy这种做法,如果实在需要这样用可以在这个生命周期钩子中手动移除dom节点

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享