1. 程式人生 > >Vue入門和基礎——生命週期函式

Vue入門和基礎——生命週期函式

Vue入門和基礎(二)

生命週期函式:
每個Vue例項被建立的時候都要經歷一系列的初始化過程,這個過程就是Vue的生命週期

先上一張官圖
在這裡插入圖片描述
其實官網上已經表明的很詳細了,從圖中我們可以看一個Vue例項的一整個生命週期中有很多個鉤子函式,不用的鉤子函式提供給我們在不同的時期進行操作,如圖我們可以看出一共有八個這樣的函式:

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed

下面就是一一介紹:
先上一段程式碼:

<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>vue的初始化過程</title>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <h1>{{message}}</h1>
    </div>
    </body>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'This is a APP'
            },
            beforeCreate: function() {
                console.group('------beforeCreate建立前狀態------');
                console.log("el     : " + this.$el); //undefined
                console.log("data   : " + this.$data); //undefined
                console.log("message: " + this.message)
            },
            created: function() {
                console.group('------created建立完畢狀態------');
                console.log("el     : " + this.$el); //undefined
                console.log("data   : " + this.$data); //已被初始化
                console.log("message: " + this.message); //已被初始化
            },
           	beforeMount: function() {
       		 console.group('------beforeMount掛載前狀態------');
        	console.log("el     : " + (this.$el)); //已被初始化
        	console.log(this.$el);
        	console.log("data   : " + this.$data); //已被初始化
        	console.log("message: " + this.message); //已被初始化
    },
    		mounted: function() {
        		console.group('------mounted 掛載結束狀態------');
        		console.log("el     : " + this.$el); //已被初始化
        		console.log(this.$el);
        		console.log("data   : " + this.$data); //已被初始化
       	 		console.log("message: " + this.message); //已被初始化
    },
        })
    </script>
    </html>

執行程式碼在控制檯檢視得到結果:

在這裡插入圖片描述
我們可以看出在初始化之前,進行了資料的觀測,而在created的時候 data已經進行了繫結。但是el還是undefined;
beforeMount - mounted:
這個時候對el是否存在進行了判斷,如果存在就繼續,如果不存在,Vue的生命週期在此處就結束了,el就是當前例項化掛載的dom節點。而在mounted之後,h1標籤中的{{message}}變成了 This is a APP;
beforeUpdate - updated

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>vue的初始化過程</title>
    <script src="https://cdn.jsdelivr.net/npm/
[email protected]
/dist/vue.js"></script> </head> <body> <div id="app"> <h1>{{message}}</h1> <p>{{num}}</p> <button @click="add()">Add</button> </div> </body> <script> var app = new Vue({ el: '#app', data: { message: 'This is a APP', num:1, }, methods:{ add:function () { this.num++; } }, beforeUpdate: function () { console.group('beforeUpdate 更新前狀態===============》'); console.log("el : " + this.$el); console.log(this.$el); console.log("data : " + this.$data); console.log("message: " + this.message); }, updated: function () { console.group('updated 更新完成狀態===============》'); console.log("el : " + this.$el); console.log(this.$el); console.log("data : " + this.$data); console.log("message: " + this.message); }, beforeDestroy: function () { console.group('beforeDestroy 銷燬前狀態===============》'); console.log("el : " + this.$el); console.log(this.$el); console.log("data : " + this.$data); console.log("message: " + this.message); }, destroyed: function () { console.group('destroyed 銷燬完成狀態===============》'); console.log("el : " + this.$el); console.log(this.$el); console.log("data : " + this.$data); console.log("message: " + this.message) } }) </script> </html>

執行上述程式碼並點選Add按鈕控制檯檢視結果
在這裡插入圖片描述

這兩個函式元件更新時觸發。
beforeDestroy-destroyed:
beforeDestroy鉤子函式在例項銷燬之前呼叫。但是在此時,例項依然可以呼叫。
destroyed鉤子函式在Vue 例項銷燬後呼叫。整個例項被銷燬。