Vue.js 生命周期

简介:

生命周期示意图:

wKioL1hHqxGxe-zWAAILL5z4vV8240.pngbeforeCreate  --> Function

在实例初始化之后,数据观测(data observer)和event/watcher 事件配置之前调用



created  --> Function

实例已经创建完成之后被调用,在这一步,实例已经完成以下的配置:

> 数据观测(data observer)

> 属性和方法运算

> watch/event 事件回调



beforeMount  --> Function

在挂载开始之前被调用,相关的 render 函数首次被调用


该钩子在服务器端渲染期间不被调用




mounted  --> Function

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。


该钩子在服务器端渲染期间不被调用。




beforeUpdate  --> Function

数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。


该钩子在服务器端渲染期间不被调用。




updated  --> Function

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。


该钩子在服务器端渲染期间不被调用。




activated  --> Function

keep-alive 组件激活时调用。


该钩子在服务器端渲染期间不被调用。




deactivated  --> Function

keep-alive 组件激活时调用。


该钩子在服务器端渲染期间不被调用。





beforeDestroy  --> Function

实例销毁之前调用。在这一步,实例仍然完全可用。


该钩子在服务器端渲染期间不被调用。




destroyed  --> Function

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


该钩子在服务器端渲染期间不被调用。



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html>
< html >
< head  lang = "en" >
     < meta  charset = "UTF-8" >
     < title ></ title >
</ head >
< body >
 
< div  id = "app" >
     `msg`
</ div >
 
< script  src = "//cdn.bootcss.com/vue/2.0.8/vue.js" ></ script >
< script >
     var vm = new Vue({
         el:'#app',
         data:{
             msg:'Hello Vue'
         },
         beforeCreate: function () {
             alert('实例创建之前');
         },
         created: function () {
             alert('实例已经创建');
         },
         beforeMount: function () {
             alert('实例挂载之前');
         },
         mounted: function () {
             alert('实例挂载到根元素 #app上');
         },
         beforeUpdate: function () {
             alert('数据更新之前');
         },
         updated: function () {
             alert('数据更新之后');
         },
         activated: function () {
             alert('keep-alive 组件激活时调用');
         },
         deactivated: function () {
             alert('keep-alive 组件停用时调用');
         },
         beforeDestroy: function () {
             alert('实例销毁之前调用');
         },
         destroyed: function () {
             alert('实例销毁之后调用');
         }
     })
</ script >
</ body >
</ html >


wKioL1hHsiKRpGgSAAfuIyK43dY856.gif


监听数据变化

vm.$watch(expOrFn, callBack, [options])


参数:

expOrFn   --> String 或 Function

callBack    --> 回调函数

options     --> 对象    

        options取值:  deep  --> boolean

                                 immediate  --> boolean


用法:

观察 Vue 实例变化的一个表达式或计算属性函数,回调函数得到的参数为新值和旧值,表达式只接受监督的键路径。对于更复杂的表达式,用一个函数取代。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
< html >
< head  lang = "en" >
     < meta  charset = "UTF-8" >
     < title ></ title >
</ head >
< body >
< div  id = "app" >
     `a`
     < br >
     `b`
</ div >
 
< script  src = "//cdn.bootcss.com/vue/2.0.8/vue.js" ></ script >
< script >
     //创建根实例
     var vm = new Vue({
         el:'#app',
         data:{
             a:123,
             b:321
         }
     });
 
     //监听数据变化
     vm.$watch('a',function(){
         alert('数据a 和 数据b 发生变化了');
         this.b = this.a + 100;
     },{deep:true});
 
     document.onclick=function(){
         vm.a =1;
     }
</ script >
</ body >
</ html >


wKioL1hHt6-y3VdzAAUkbvbA7qM088.gif


选项:deep   深度监视


为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。

1
2
3
4
5
vm.$watch( 'someObject' , callback, {
   deep:  true
})
vm.someObject.nestedValue = 123
// callback is fired



选项:immediate


在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调:

1
2
3
4
vm.$watch( 'a' , callback, {
   immediate:  true
})
// 立即以 `a` 的当前值触发回调

本文转自   frwupeng517   51CTO博客,原文链接:http://blog.51cto.com/dapengtalk/1880350

相关文章
|
21天前
|
JavaScript
vue实例的data属性,可以在哪些生命周期中获取到
Vue实例的`data`属性在`beforeCreate`、`created`和`beforeMount`阶段已可访问。此时,虽能使用数据,但事件监听和DOM操作不可行。`beforeCreate`时数据可访问,但未初始化观测和事件;`created`时数据完全可用,但未挂载到DOM;`beforeMount`时仍可访问数据,DOM挂载未开始。
28 3
|
1月前
|
JavaScript API 开发者
vue3的生命周期
Vue3 保留了大部分 Vue2 的生命周期钩子,`同时引入了 Composition API`,为开发者提供了更灵活的逻辑复用和组织方式。以下是 Vue3 中组件生命周期的详细介绍
|
1月前
|
JavaScript
在vue中,在哪个生命周期内调用异步请求?
在vue中,在哪个生命周期内调用异步请求?
20 0
|
1月前
|
JavaScript
在vue中,Vue 的父组件和子组件生命周期钩子函数执行顺序?
在vue中,Vue 的父组件和子组件生命周期钩子函数执行顺序?
15 0
|
1月前
|
JavaScript
在vue中,谈谈你对 Vue 生命周期的理解?
在vue中,谈谈你对 Vue 生命周期的理解?
17 0
QGS
|
3月前
|
资源调度 JavaScript 前端开发
手拉手Vue3生命周期实战应用
手拉手Vue3生命周期实战应用
QGS
45 0
|
3月前
|
JavaScript 开发者
Vue组件生命周期钩子函数有哪些?它们分别在什么时候触发?
Vue组件生命周期钩子函数有哪些?它们分别在什么时候触发?
44 0
|
1月前
|
JavaScript
vue的实例生命周期?
vue的实例生命周期?
10 0
|
1月前
|
JavaScript 前端开发 API
【Vue】探究 Vue 2 与 Vue 3 生命周期:变化与延续
【Vue】探究 Vue 2 与 Vue 3 生命周期:变化与延续
|
1月前
|
JavaScript 前端开发 开发者