Vue js 的生命周期详解

摘要:
Vue实例的生命周期Vue实例有一个完整的生命周期,即从开始创建、初始化数据、编译模板、装载Dom→ 渲染,更新→ 渲染和卸载。我们称之为Vue的生命周期。一般来说,从Vue实例创建到销毁的过程就是生命周期。在Vue的整个生命周期中,它提供了一些生命周期挂钩,让我们有机会执行自定义逻辑。它可以分为八个阶段:beforeCreate、created和for

Vue 实例的生命周期

Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列 过程,我们称这是 Vue 的生命周期。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。

在Vue的整个生命周期中,它提供了一些生命周期钩子,给了我们执行自定义逻辑的机会。

它可以总共分为8个阶段:

beforeCreate(创建前),

created(创建后),

beforeMount(载入前),

mounted(载入后),

beforeUpdate(更新前),

updated(更新后),

beforeDestroy(销毁前),

destroyed(销毁后)

接下来我们用例子来看看生命周期钩子是怎么用的:

HTML结构:

<div id="app">
    <p>{{ message }}</p>
    <input type="text" v-model="message">
    <button v-on:click="change">改变数据</button>
</div>

我们对 input 和 p 绑定了data 对象的 message 数据,Vue 实例构建如下:

 1 var app = new Vue({          
 2     el: "#app",          
 3     data: {
 4         message: "hello world"        
 5     },         
 6     beforeCreate: function() {          
 7         console.log("创建前")            
 8         console.log(this.message)            
 9         console.log(this.$el)          
10     },         
11     created: function() {
12         console.log("创建之后");            
13         console.log(this.message)            
14         console.log(this.$el)          
15     },         
16     beforeMount: function() {            
17         console.log("mount之前")            
18         console.log(this.message)            
19         console.log(this.$el)          
20     },          
21     mounted: function() {            
22         console.log("mount之后")            
23         console.log(this.message)            
24         console.log(this.$el)          
25     },          
26     beforeUpdate: function() {            
27         console.log("更新前");            
28         console.log(this.message)            
29         console.log(this.$el)          
30     },          
31     updated: function() {            
32         console.log("更新完成");            
33         console.log(this.message);            
34         console.log(this.$el)          
35     },          
36     beforeDestroy: function() {            
37         console.log("销毁前");            
38         console.log(this.message)            
39         console.log(this.$el)            
40         console.log(this.$el)          
41     },          
42     destroyed: function() {           
43         console.log("已销毁");          
44         console.log(this.message)          
45         console.log(this.$el)          
46     }   
47  });  

Vue js 的生命周期详解第1张

然后在 methods 里面添加一个change方法:

methods: {
    change :function() {
        this.message = "vue.js"
    } 
}

点击按钮之后出现的是:

 Vue js 的生命周期详解第2张

这就是vue的生命周期,很简单吧。

在实例中分别在每个生命周期钩子中 console.log('钩子名称',this.message) 我们发现,第一次页面加载时触发了 beforeCreate, created, beforeMount, mounted 这几个钩子,data 数据在 created 中可获取到。再去 console.log('mounted: ', document.getElementsByTagName('p')[0]) ,DOM 渲染在 mounted 中已经完成。

我们再试着去点击按钮更改 message 和 input 输入框中的内容,可以看到数据同步发生改变,这就是数据绑定的效果,在更新数据时触发 beforeUpdate 和 updated 钩子,且在 beforeUpdate 触发时,数据已更新完毕。

而 destroy 仅在调用app.$destroy();时触发,对 vue 实例进行销毁。销毁完成后,我们再重新改变 number 的值,vue 不再对此动作进行响应了。但是原先生成的dom元素还存在,可以这么理解,执行了destroy操作,后续就不再受vue控制了。

生命周期小结

生命周期钩子的一些使用方法:

beforecreate : 可以在这加个loading事件,在加载实例时触发 
created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
mounted : 挂载元素,获取到DOM节点
updated : 如果对数据统一处理,在这里写上相应函数
beforeDestroy : 可以做一个确认停止事件的确认框
nextTick : 更新数据后立即操作dom

免责声明:文章转载自《Vue js 的生命周期详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇import keras,tensorflow,出现kernel died restarting,解决办法java模拟post请求登录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue一些基本操作技巧

1.Vue删除data列表中的项 下为异步删除购物车,并清空当前条目 1 cartDel: function(item) { 2 let _this = this; 3 _this.confirm("确认删除吗?", function() { 4 _this.axios.post(cartD...

MySQL配置主主及主从备份

MySQL主从备份配置实例 场景: 1、主服务器192.168.0.225、从服务器192.168.0.226。其中,主服务器上已有数据。 2、主从服务器上的mysql版本及安装配置相同。 一、主从备份的原理: 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并...

RAC一个节点自动重启问题分析

题记:在RAC数据库的故障当中,节点重启的现象很常见,在这种问题的处理当中,有一定的规律性。为了更好的说明这个问题的处理过程,保证出现该类问题的时候,能够有序的进行处理,特编写此文档。  问题现象描述   此问题的现象比较明显,也就是数据库自动重启,或者是节点自动重启,客户端在数据库重启期间无法连接数据库,导致业务断连的现象。这种情况如果出现在业务高峰期间...

Linux的log日志功能

# cd /etc/init.d # ./syslog restart Shutting down kernel logger: OK ]Shutting down system logger: OK ]Starting system logger: OK ]Starting kernel logger: OK ] 不过最好查询清楚是为什么不能写入linu...

【JS】使用变量作为object的key-方法汇总

1、方法一 1 var a = 'id'; 2 var str = '{'+a+' : 12}' 3 var obj = eval("("+str+")"); 结果: 1 obj={id:12} 2、方法二 1 var a='name'; 2 var obj={}; 3 obj[a]='jack'; 结果: 1 obj={name:'jack'}...

为什么有sessionStorage,localStorage等,还需要vuex

定义 1.local storage local storage以文件的方式存储在本地,永久保存。只能存储字符串类型, 对于其他类型可使用JSON.stringify和JSON.parse方法转换存储。 用法:localStorage.setItem("token": value); localStorage.token = value; localSto...