vue(學(xué)習(xí)筆記一)——詳解vue的生命周期

首先,每個(gè)Vue實(shí)例在被創(chuàng)建之前都要經(jīng)過(guò)一系列的初始化過(guò)程,這個(gè)過(guò)程就是vue的生命周期。首先看一張圖

可以看到在vue一整個(gè)的生命周期中會(huì)有很多鉤子函數(shù)提供給我們?cè)趘ue生命周期不同的時(shí)刻進(jìn)行操作挂捅,那么先列出所有的鉤子函數(shù),然后我們?cè)僖灰辉斀猓?/p>

beforeCreate

created

beforeMount

mounted

beforeUpdate

updated

beforeDestroy

destroyed

可以看到一個(gè)vue實(shí)例在創(chuàng)建過(guò)程中調(diào)用的幾個(gè)生命周期鉤子。

1.在beforeCreate和created鉤子函數(shù)之間對(duì)的生命周期

? ? 在這個(gè)生命周期之間闲先,進(jìn)行初始化事件状土,進(jìn)行數(shù)據(jù)的觀測(cè),可以看到在created的時(shí)候數(shù)據(jù)已經(jīng)和data屬性進(jìn)行綁定(放在data中的屬性當(dāng)值發(fā)生改變的同時(shí)伺糠,視圖也會(huì)改變)蒙谓。

2.created鉤子函數(shù)和beforeMount間的生命周期


在這一階段發(fā)生的事情還是比較多的。

首先會(huì)判斷對(duì)象是否有el選項(xiàng)训桶。如果有的話就繼續(xù)向下編譯累驮,如果沒(méi)有el選項(xiàng),則停止編譯舵揭,也就意味著停止了生命周期谤专,直到在該vue實(shí)例上調(diào)用vm.$mount(el)。此時(shí)注釋掉代碼中:

el:?'#app',

然后運(yùn)行可以看到到created的時(shí)候就停止了:


如果我們?cè)诤竺胬^續(xù)調(diào)用vm.$mount(el),可以發(fā)現(xiàn)代碼繼續(xù)向下執(zhí)行了

vm.$mount(el) //這個(gè)el參數(shù)就是掛在的dom接點(diǎn)


然后午绳,我們往下看置侍,template參數(shù)選項(xiàng)的有無(wú)對(duì)生命周期的影響。

(1).如果vue實(shí)例對(duì)象中有template參數(shù)選項(xiàng)拦焚,則將其作為模板編譯成render函數(shù)蜡坊。

(2).如果沒(méi)有template選項(xiàng),則將外部HTML作為模板編譯赎败。

(3).可以看到template中的模板優(yōu)先級(jí)要高于outer HTML的優(yōu)先級(jí)秕衙。

修改代碼如下, 在HTML結(jié)構(gòu)中增加了一串html,在vue對(duì)象中增加了template選項(xiàng)

<!DOCTYPE html>

<html lang="en">

<head>

? <meta charset="UTF-8">

? <meta name="viewport" content="width=device-width, initial-scale=1.0">

? <meta http-equiv="X-UA-Compatible" content="ie=edge">

? <title>vue生命周期學(xué)習(xí)</title>

? <script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>

</head>

<body>

? <div id="app">

? ? <!--html中修改的-->

? ? <h1>{{message + '這是在outer HTML中的'}}</h1>

? </div>

</body>

<script>

? var vm = new Vue({

? ? el: '#app',

? ? template: "<h1>{{message +'這是在template中的'}}</h1>", //在vue配置項(xiàng)中修改的

? ? data: {

? ? ? message: 'Vue的生命周期'

? ? }

</script>

</html>

執(zhí)行后的結(jié)果可以看到在頁(yè)面中顯示的是:


那么將vue對(duì)象中template的選項(xiàng)注釋掉后打印如下信息:


這下就可以想想什么el的判斷要在template之前了~是因?yàn)関ue需要通過(guò)el找到對(duì)應(yīng)的outer template僵刮。

在vue對(duì)象中還有一個(gè)render函數(shù)灾梦,它是以createElement作為參數(shù),然后做渲染操作妓笙,而且我們可以直接嵌入JSX.

new Vue({

? ? el: '#app',

? ? render: function(createElement) {

? ? ? ? return createElement('h1', 'this is createElement')

? ? }

})

可以看到頁(yè)面中渲染的是:


所以綜合排名優(yōu)先級(jí):

render函數(shù)選項(xiàng) > template選項(xiàng) > outer HTML.

3. beforeMount和mounted 鉤子函數(shù)間的生命周期


可以看到此時(shí)是給vue實(shí)例對(duì)象添加$el成員若河,并且替換掉掛在的DOM元素。因?yàn)樵谥癱onsole中打印的結(jié)果可以看到beforeMount之前el上還是undefined寞宫。

4. mounted

注意看下面截圖:


在mounted之前h1中還是通過(guò){{message}}進(jìn)行占位的萧福,因?yàn)榇藭r(shí)還有掛在到頁(yè)面上,還是JavaScript中的虛擬DOM形式存在的辈赋。在mounted之后可以看到h1中的內(nèi)容發(fā)生了變化鲫忍。

5. beforeUpdate鉤子函數(shù)和updated鉤子函數(shù)間的生命周期


當(dāng)vue發(fā)現(xiàn)data中的數(shù)據(jù)發(fā)生了改變,會(huì)觸發(fā)對(duì)應(yīng)組件的重新渲染钥屈,先后調(diào)用beforeUpdateupdated鉤子函數(shù)悟民。我們?cè)赾onsole中輸入:

vm.message = '觸發(fā)組件更新'

發(fā)現(xiàn)觸發(fā)了組件的更新:


6.beforeDestroy和destroyed鉤子函數(shù)間的生命周期

beforeDestroy鉤子函數(shù)在實(shí)例銷(xiāo)毀之前調(diào)用。在這一步篷就,實(shí)例仍然完全可用射亏。

destroyed鉤子函數(shù)在Vue 實(shí)例銷(xiāo)毀后調(diào)用。調(diào)用后,Vue 實(shí)例指示的所有東西都會(huì)解綁定智润,所有的事件監(jiān)聽(tīng)器會(huì)被移除及舍,所有的子實(shí)例也會(huì)被銷(xiāo)毀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窟绷,一起剝皮案震驚了整個(gè)濱河市锯玛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兼蜈,老刑警劉巖攘残,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異为狸,居然都是意外死亡肯腕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)钥平,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)实撒,“玉大人,你說(shuō)我怎么就攤上這事涉瘾≈” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵立叛,是天一觀的道長(zhǎng)负敏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)秘蛇,這世上最難降的妖魔是什么其做? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮赁还,結(jié)果婚禮上妖泄,老公的妹妹穿的比我還像新娘。我一直安慰自己艘策,他們只是感情好蹈胡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著朋蔫,像睡著了一般罚渐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驯妄,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天荷并,我揣著相機(jī)與錄音,去河邊找鬼青扔。 笑死源织,一個(gè)胖子當(dāng)著我的面吹牛翩伪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雀鹃,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼励两!你這毒婦竟也來(lái)了黎茎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤当悔,失蹤者是張志新(化名)和其女友劉穎傅瞻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盲憎,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗅骄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饼疙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溺森。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窑眯,靈堂內(nèi)的尸體忽然破棺而出屏积,到底是詐尸還是另有隱情,我是刑警寧澤磅甩,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布炊林,位于F島的核電站,受9級(jí)特大地震影響卷要,放射性物質(zhì)發(fā)生泄漏渣聚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一僧叉、第九天 我趴在偏房一處隱蔽的房頂上張望奕枝。 院中可真熱鬧,春花似錦瓶堕、人聲如沸倍权。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)薄声。三九已至,卻和暖如春题画,著一層夾襖步出監(jiān)牢的瞬間默辨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工苍息, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缩幸,地道東北人壹置。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像表谊,于是被迫代替她去往敵國(guó)和親钞护。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容