提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:vue生命周期的详细介绍
提示:以下是本篇文章正文内容,下面案例可供参考
一、介绍
vue生命周期分别有创建、初始化数据、编译模板、挂在DOM、渲染-更新-渲染、卸载利用钩子函数完成对应的项目效果
二、八个方法
beforeCreate( 创建前 )
在实例化之后,数据的观测和事件的配置之前的时候调用,此时组件的选项对象还未创建,el 和 data 并未初始化,因此无法访问methods, data, computed等上的方法和数据
beforeCreate() {
//在组件还没有创建好时,是不能访问组件的任何方法和属性的
console.log('beforeCreate 组件开始创建前')
},
created ( 创建后)
在创建之后使用,主要用于数据观测、属性和方法的运算,watch/event事件回调,完成了data 数据的初始化,el没有。 然而,挂在阶段还没有开始.
created() {
// 组件创建好之后可以组件实例的变量和方法
// 组件创建好之后不能访问dom
// $.post('user',function(res){
// this.username= res.data
// })
//可以在此钩子函数请求数据
console.log('created 组件创建好了')
},
beforeMount (挂载前)
用于在挂载之前使用,在这个阶段是获取不到dom操作的,把data里面的数据和模板生成html,完成了data等初始化,注意此时还没有挂在html到页面上
beforeMount() {
// 挂载组件
// 组件将要被挂载了、
// 可以访问到要挂载的目标
// 不能访问到组件的dom
// 这里可以访问到dom 但不能访问到组件的dom只能访问到要挂载的目标dom
console.log(this.$el)
console.log('beforeMount 组件开始挂载')
},
mount (挂载后)
用于挂载之后使用,在这个时候可以获取到dom操作,比如可以获取到ref等,操作的dom, 在这个时候只能调用一次ajax,在这个时候el和data都可以获取的到
mounted() {
// 组件挂载完成
// 只有当组件挂载完成之后才能访问到组件的dom
console.log(this.$el)
console.log('mounted 组件挂载完成')
// 必须通过mounted钩子之后去获取到组件的dom元素
}
beforeUpdate (更新前)
在数据更新之前被调用,发生在虚拟DOM重新渲染,可以在该钩子中进一步地更改状态,不会触发重复渲染过程
beforeUpdate() {
// 只有更新和模板发生关联的数据才会触发这个钩子
// 和模板绑定的数据更新之前
console.log('beforeUpdate 和模板绑定的数据更新之前')
}
updated (更新后)
在由于数据更改导致地虚拟DOM重新渲染会调用,调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作,然后在大多是情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环,但是在服务器端渲染期间不被调用,可以用于监听某些数据的时候使用钩子
updated() {
// 只有更新和模板发生关联的数据才会触发这个钩子
// 和模板绑定的数据更新完成之后
console.log('updated 和模板绑定的数据更新完成之后')
},
beforeDestroy(销毁前)
在这个时候还是可以用this来获取,可以用于销毁计时器时候使用,为了防止跳转到其它页面该事件还在执行,还可以清除dom事件等
beforeDestroy() {
// 一般像页面组件 页面离开之前 保存数据 可以通过这个钩子来完成
// 当组件销毁之前触发
console.log('beforeDestroy 当组件销毁之前触发')
console.log(this.$el)
}
destroy(销毁后)
在实例销毁之后调用,调用后,所以的事件监听器会被移出,所有的子实例也会被销毁.
destroyed() {
// 当组件销毁之后触发
console.log('destroyed 当组件销毁之后触发')
//等待系统自动回收对象
//销毁之后组件的对象还在,但是跟vue的实例脱离了关系了
}