vue实例的生命周期详解

Vue实例的生命周期

简介

此篇文章说的是最简单的单个VUE组件的生命周期。
官网中的长图诠释了Vue实例从创建,运行到销毁的整个过程。从vue实例的创建,运行,销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期
vue实例的生命周期详解_第1张图片
为了便于理解,再代码中创建vue实例,并在每个钩子函数中console出每个生命周期的el,data和message。此段代码可以直接复制。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
</head>
<body>

<div id="app">
    <p>{{ message }}</p>
    <h1>{{message + '这是在outer HTML中的'}}</h1>
</div>

<script type="text/javascript">

    var app = new Vue({
        el: '#app',
        data: {
            message : "xuxiao is boy"
        },
        template:"

{{message +'这是在template中的'}}

"
, // render: function(createElement) { // return createElement('h1', 'this is createElement') // }, beforeCreate: function () { console.group('beforeCreate 创建前状态===============》'); console.log("%c%s", "color:red" , "el : " + this.$el); //undefined console.log("%c%s", "color:red","data : " + this.$data); //undefined console.log("%c%s", "color:red","message: " + this.message) }, created: function () { console.group('created 创建完毕状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); //undefined console.log("%c%s", "color:red","data : " + this.$data); //已被初始化 console.log("%c%s", "color:red","message: " + this.message); //已被初始化 }, beforeMount: function () { console.group('beforeMount 挂载前状态===============》'); console.log("%c%s", "color:red","el : " + (this.$el)); //已被初始化 console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); //已被初始化 console.log("%c%s", "color:red","message: " + this.message); //已被初始化 }, mounted: function () { console.group('mounted 挂载结束状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); //已被初始化 console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); //已被初始化 console.log("%c%s", "color:red","message: " + this.message); //已被初始化 }, beforeUpdate: function () { console.group('beforeUpdate 更新前状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); console.log("%c%s", "color:red","message: " + this.message); }, updated: function () { console.group('updated 更新完成状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); console.log("%c%s", "color:red","message: " + this.message); }, beforeDestroy: function () { console.group('beforeDestroy 销毁前状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); console.log("%c%s", "color:red","message: " + this.message); }, destroyed: function () { console.group('destroyed 销毁完成状态===============》'); console.log("%c%s", "color:red","el : " + this.$el); console.log(this.$el); console.log("%c%s", "color:red","data : " + this.$data); console.log("%c%s", "color:red","message: " + this.message) } }) </script> </body> </html>

输出结果分析

vue实例的生命周期详解_第2张图片
vue实例的生命周期详解_第3张图片
vue实例的生命周期详解_第4张图片

详细分析流程图

通过代码大概了解整个流程之后再回头拆开来看官网流程图。生命周期可以分为四个阶段,初始化阶段,模板编译阶段,挂在阶段,已挂载和卸载阶段。

初始化阶段

vue实例的生命周期详解_第5张图片

模板编译阶段

vue实例的生命周期详解_第6张图片
这块比较复杂,观察刚才那段代码前面部分

   var app = new Vue({
        el: '#app',
        data: {
            message : "xuxiao is boy"
        },
        template:"

{{message +'这是在template中的'}}

"
, // render: function(createElement) { // return createElement('h1', 'this is createElement') // },

首先会判断有没有el选项,如果有就继续,没有就停止生命周期。随后判断是否有template选项(此段代码中有),于是就编译template选项为render function。运行代码得到网页如下
在这里插入图片描述
若没有template选项,就把outerHTML当做template编译为render function。(把此段代码中的template选项注释掉),得到网页如下
vue实例的生命周期详解_第7张图片
这是把outerHTML当作模板编译了

<div id="app">
    <p>{{ message }}p>
    <h1>{{message + '这是在outer HTML中的'}}h1>
div>

如果把实例中render function选项的注释去掉,则直接用render function里的,得到网页如下
vue实例的生命周期详解_第8张图片
所以按优先级来说 render function>template>outerHTML

挂载阶段

vue实例的生命周期详解_第9张图片

已挂载和卸载

vue实例的生命周期详解_第10张图片

具体使用

vue实例的生命周期详解_第11张图片
vue实例的生命周期详解_第12张图片
平时用的比较多的是mouted和created
vue实例的生命周期详解_第13张图片
因为在created时还没完成挂载,无法通过id获得DOM元素,所以chart.js里的该操作要使用在mounted下

你可能感兴趣的:(vue)