Vue生命周期函数
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。注:生命周期函数是每个Vue实例的函数
Vue生命周期函数分为三个阶段
-
创建阶段
-
beforeCreate:这个阶段只是初始化事件和生命周期函数,Vue实例上挂载的元素el和data对象都是undefined,还没有进行初始化。可以在这里加一个loading事件,在加载实例时触发。
-
created:这个阶段进行了各种初始化,Vue实例中的data和methods都已经初始化好了,可以访问,但是此时并没有挂载到DOM上,元素el也还没有。初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
-
这里会进行el的判断,如果有el,就继续向下编译,如果没有,则停止编译,也就意味着停止生命周期,知道子啊该Vue实例上调用。
-
接下来判断是否有template,如果参数中有template参数选项,则将其作为模板编译成render函数。如果没有则将外部的HTML作为模板编译,由此可见template中的模板的优先级是要高于外部HTML的。
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <h1>{{message+'这是outHTML中的html'}}</h1> </div> <script src="../vue包/vue.js"></script> <script> var vm = new Vue({ el: "#app", data: { message: 'vue生命周期函数' }, template: "<h1>{{message+'这是template中的html'}}</h1>" }) </script> </body> </html>
当将Vue实例中template注释掉时页面显示:
-
**render函数选项 > template参数选项 > 外部HTML**
-
beforeMount:模板在内存中已经编译好了,但是并没有挂载到页面中,Vue实例中的el和data都初始化好了,在挂载之前都是虚拟的DOM节点。
-
mounted:模板被挂载到了页面上,DOM也被渲染上来了,Vue实例中的el和data等也被挂载到了真实的DOM上,可以进行DOM操作了。
-
-
运行阶段
- beforeUpdate:当数据发生改变后,数据被渲染到DOM上之前触发此函数,此时data中的数据已经被改变了,但是DOM上的数据还是原来的数据。
- updated:将发生改变的数据渲染到页面上去。这个阶段可以写一些对数据进行处理的函数。
-
销毁阶段
-
beforeDestroy:实例销毁前调用,实例还可以用,this能获取到实例,常用于销毁定时器,解绑事件。
-
beforeDestroy:实例销毁前调用,实例还可以用,this能获取到实例,常用于销毁定时器,解绑事件。
-
destroyed:实例销毁后调用,调用后所有事件监听器会被移除,所有的子实例都会被销毁。
-