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 實例銷燬後調用。整個實例被銷燬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章