vue的知识点整理

152 阅读2分钟

vue生命周期:vue实列在创建之前都要经过一些列初始化的过程,就是vue的生命周期。首先看一张官方的关于生命周期的图


在vue进行初始化的过程中经历了:

1、beforeCreate
2、created
3、beforeMount
4、mounted
5、beforeUpdate
6、updated
7、beforeDestroy
8、destroyed

等八个过程。。。。。。。。。。。。

//index.html
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <div id="app">        <button @click="btn">click</button>        <h3>{{msg}}-----外部html</h3>    </div></body></html><script src="./build.js"></script>

//app.js
import Vue from 'vue';new Vue({    //el:"#app",    //render:h=>h(App),    //template: "<h1>{{msg +'这是在template中的'}}</h1>",    data:{        msg:'333333333333'    },    methods:{        btn(e){            this.msg = "9999999999999999";        }    },    beforeCreate(){        console.log('beforeCreate ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    created(){        console.log('Created ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    beforeMount(){        console.log('beforeMount ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    mounted(){        console.log('mounted ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    beforeUpdate(){        console.log('beforeUpdate ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    updated(){        console.log('updated ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    },    beforeDestroy(){        console.log('beforeDestroy ============>');        console.log(this.msg);        console.log(this.$data);    },    destroyed(){        console.log('destroyed ============>');        console.log(this.msg);        console.log(this.$data);        console.log(this.$el);    }}).$mount("#app");

在初始化阶段可以看到如下图的结果:


1、在beforeCreate 和 created 的生命周期中间进行初始化事件、进行数据的观测。可以看到created的时候数据已经和data属性进行绑定(放在data中的属性当值发生改变时视图也会发生改变)

2、在created 和 beforeMount 的生命周期中判断对象是否存在el,存在则继续向下执行,不存在则中止编译,停止生命周期。


注释点文件中的挂载点 ($mount("#app")),则文件中止了编译。{{msg}} 占位符无法解析。


3、在beforeMount 和 mounted 之间是给vue实例对象添加$el成员,并且替换掉挂在的DOM元素。因为在之前console中打印的结果可以看到beforeMount之前el上还是undefined


4、mounted : 在mounted之前元素中还是通过{{msg}}进行占位的,因为此时还没有挂载到页面上,还是JavaScript中的虚拟DOM形式存在的。在mounted之后可以看到h1中的内容发生了变化。


5、在beforeUpdate 和 updated 周期中当vue发现data中的数据发生了改变,会触发对应组件的重新渲染,先后调用beforeUpdate和updated钩子函数。


6、在beforeDestory 和 destoryed
beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。