> 文章列表 > Vue生命周期

Vue生命周期

Vue生命周期

生命周期

  • 又名:生命周期回调函数、生命周期函数、生命周期钩子
  • 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
  • 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的
  • 生命周期函数中的this指向是vm 或 组件实例对象

代码示例: 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="../js/vue.js"></script>
</head>
<body>
<div id="app"><h2 v-if="a">hello</h2><h2 :style="{opacity}">欢迎学习Vue</h2>
</div>
<script>Vue.config.productionTip = falseconst vm = new Vue({el: "#app",data: {a: false,opacity: 1},//Vue完成模板的解析并把真实的DOM元素放入页面后(挂载完毕)调用mountedmounted() {console.log('mounted', this)setInterval(() => {this.opacity -= 0.01if (this.opacity <= 0) {this.opacity = 1}}, 16)}})
</script>
</body>
</html>

常用的生命周期钩子:

  • mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
  • beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等收尾工作

关于销毁Vue实例:

  • 销毁后借助Vue开发者工具看不到任何信息
  • 销毁后自定义事件会失效,但原生DOM事件依然有效
  • 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了
     

 

 代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="../js/vue.js"></script>
</head>
<body>
<div id="app"><h2 v-text="n"></h2><h2>当前n值是:{{n}}</h2><button @click="add">点我n+1</button><button @click="bye">点我销毁vm</button>
</div>
<script>Vue.config.productionTip = falseconst vm = new Vue({el: "#app",data: {n: 1},methods: {add() {console.log('add')this.n++},bye() {console.log('bye')this.$destroy()}},watch: {n() {console.log('n变了')}},beforeCreate() {console.log('beforeCreate')},created() {console.log('created')},beforeMount() {console.log('beforeMount')},mounted() {console.log('mounted')},beforeUpdate() {console.log('beforeUpdate')},updated() {console.log('updated')},beforeDestory() {console.log('beforeDestory')},destroyed() {console.log('destroyed')}})
</script>
</body>
</html>

 

总结生命周期:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="../js/vue.js"></script>
</head>
<body>
<div id="app"><h2 :style="{opacity}">欢迎学习vue</h2><button @click="opacity = 1">透明度设置为1</button><button @click="stop">点我停止变换</button>
</div>
<script>Vue.config.productionTip = falseconst vm = new Vue({el: "#app",data: {opacity: 1},methods: {stop() {this.$destroy()}},mounted() {console.log('mounted', this)this.timer = setInterval(() => {console.log('setInterval')this.opacity -= 0.01if (this.opacity <= 0) {this.opacity = 1}}, 16)},beforeDestroy() {clearInterval(this.timer)console.log('vm即将驾鹤西游了')}})
</script>
</body>
</html>