iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
2
Modern Web

超緊繃!30天Vue.js學習日記系列 第 5

[Vue.js][日記]生命週期的變化是如此美妙啊!(2)

https://ithelp.ithome.com.tw/upload/images/20190912/20110850dsypfXRkNe.jpg

超緊繃!30天Vue.js學習日記 生命週期的變化是如此美妙啊!(2)

大家好,我們今天會延續昨天的主題,對生命週期中的鉤子函數做進一步的介紹!

我們先附上一小段昨天的範例程式碼:

created: function () {
            console.log('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); //已被初始化
        }

Created就是一個鉤子函式,它能夠被用在當根實例被創建之後,執行function內的代碼。

其他鉤子的介紹請往下看!,請參考DAY4的範例程式(9/15當天有下載的讀者們也請再次下載並且覆蓋掉它,後面會說明原因),我們看圖說故事:

https://drive.google.com/open?id=1TxW06Bo9cJNuvC_utfhIs49gW5hmnHAO

https://ithelp.ithome.com.tw/upload/images/20190915/20110850k3zNaiINIh.png

1. beforeCreate

在實例開始初始化時同步調用,此時數據觀測,事件都尚未初始化。
因此對比上面的圖,我們啥都看不到!

2. Created

實例初始化完成,但在這邊DOM尚未生成。
對比上圖,我們可以發現message已經被定義(因為message是根實例中的data)。

3. beforeMount

在Mount前執行。
我們可以發現,此時DOM已經生成,但注意到段落標籤p當中是存放{{message}},也就代表資料尚未綁定(因為綁定的指令尚未生效)。

4. mounted

https://ithelp.ithome.com.tw/upload/images/20190915/20110850Pb2YufWPct.png

在Mount結束時執行,此時所有指令皆生效,數據變化能夠觸發DOM更新。
所以,我們可以看到在beforeMount狀態時看到的{{message}}已經被替換成message所存放的值。

https://ithelp.ithome.com.tw/upload/images/20190915/201108508eYS9JsEJS.png

題外話(重要的廢話):在這邊突然發現,昨天的範例有個失誤,就是在el底下的那段html代碼並不是DOM的狀態,他只是把當前的el給印出來,害我在比對beforeUpdate以及updated的差別時背都涼掉了XD

5. beforeUpdate

在實例掛載後,再次更新它(例如:更新data時),此時DOM尚未被更新。
所以我們可以看到:message的值已經改變不過DOM尚未渲染!

6. updated

在實例被更新後,更新完DOM結構時執行。

7. activated

在動態組件初始化渲染時執行(需配合動態組件keep-alive屬性使用,我們大概會在第15天了解它)。

8. beforeDestroy

在開始銷毀實例時執行(此時實例依舊可用)。

9. destroyed

在實例銷毀後執行,此時所有綁定及指令皆已解除,子實例也被銷毀。

第8個以及第9個在昨天就有提到,所以就不會再做更多補充!

太好了,我們今天終於將生命週期的主題告一段落ORZ,接下來會開始介紹指令(終於進入資料綁定的部分啦!!),我們明天見XD


上一篇
[Vue.js][日記]生命週期的變化是如此美妙啊!
下一篇
[Vue.js][日記]指令V集合!
系列文
超緊繃!30天Vue.js學習日記33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言