文章目录
前言
在vue中生命周期的学习对我们之后的学习和理解非常重要本片将讲解vue生命周期中的钩子函数
一、生命周期的简单介绍
vue的生命周期其实就是一个vue实例从创建到销毁的一个过程
二、生命周期中的钩子函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<div class="box">name:{{ name }}</div>
<ul>
<li v-for="( item,index ) in arr" :key="index">{{ item }}</li>
</ul>
<button @click="name='翠花'">name=翠花</button>
</div>
<button onclick="destroy()">销毁</button>
<script>
// 虚拟dom
// { tagname:"div",attr:{ class:"box" },chilren:{} }
// { tagname:"div",attr:{ class:"box1" },chilren:{} }
var vm = new Vue({
// el:"#app",
data:{
name:"狗蛋",
arr:["关羽","吕布","ll"]
},
// 1.组件实例创建之前
beforeCreate() {
console.group();
console.log("el",this.$el); //undefined
console.log("data",this.$data); //undefined
console.log("data",this.name); //undefined
console.groupEnd()
},
// 2.创建完成 不能操作节点,但是可以操作数据,所以可以发送请求等
created() {
console.group();
console.log("el",this.$el); //undefined
console.log("data",this.$data); // {}
console.log("data",this.name); //狗蛋
console.groupEnd()
},
// 3.挂载之前
beforeMount() {
console.group();
console.log("el",this.$el); // 找到了节点,但是没有完成挂载
console.log("data",this.$data); // {}
console.log("data",this.name); //狗蛋
console.groupEnd()
},
// 4.挂载完成 都可以使用
mounted() {
console.group();
console.log("el",this.$el); // 变量解析了
console.log("data",this.$data); // {}
console.log("data",this.name); //狗蛋
console.groupEnd()
},
// 5.视图更新之前(data的数据改变)
beforeUpdate() {
console.log(this.name);
console.log("beforeUpdate");
},
// 6.视图更新完成
updated(){
console.log(this.name);
console.log("updated");
},
// 7.销毁之前
beforeDestroy() {
console.log("beforeDestroy");
},
// 8.销毁完成
destroyed() {
console.log("destroyed");
},
}).$mount("#app")
function destroy(){
vm.$destroy();//销毁实例
}
</script>
</body>
</html>
2,1 beforeCreate函数
这个函数时期是在刚刚创建完vue实例,data,methods等都存在了,但是还没有初始化,里面没有值和方法
2.2 created函数
这个函数的时期data中的数据和methods已经有初始化完成,可以调用data中的数据和方法了,这个时期一般用于发送请求.在这个时期是不能够操作dom的,但是如果硬是要在这个时期操作dom的话可以使用netTick()去操作dom
2.3 beforemount
这个时期在模板已经完成编译和注册,组件都已经准备好了,但是还没有向挂载点渲染
2.4 mounted
这个钩子函数时期,已经将组件渲染到了视图上,在这个阶段已经可以对dom节点进行操作了
如果存在keep-alive组件的话
如果存在keep-alive的话会多出两个生命周期 actived 和deactivated 就是激活状态和非激活状态
keep-alive可以保存组件状态并缓存,第一次进入页面还不会进入到这个生命周期,必须要等组件缓存完毕之后才会进入这个生命周期中去.
2.5 beforeupdate
这个时期在逻辑层上data中的数据已经更新完成了,但是还没有渲染到页面中去
2.6 updated
在这个钩子函数时期,data中的数据与页面中的数据已经同步,页面上的数据已经更新
2.7 beforedestory
在这个钩子函数时期,vue实例已经从运行阶段进入到了销毁阶段但是这个时候还没有真正的销毁,vue里面的data等还能继续使用
2.8 destoryed
vue实例已经完全销毁里面所有的东西都不能使用