Vue生命周期及其用法(2019-03-22)


Vue框架生命周期總結(jié)

一扰楼、生命周期運行圖
3504099265-580628fd03258_articlex.png
二、所有生命周期
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
</head>
<body>

<div id="app">
     <p>{{ message }}</p>
</div>

<script type="text/javascript">
    
  var app = new Vue({
      el: '#app',
      data: {
          message : "xuxiao is boy" 
      },
       beforeCreate: function () {
               console.group('beforeCreate 創(chuàng)建前狀態(tài)===============》');
               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 創(chuàng)建完畢狀態(tài)===============》');
            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 掛載前狀態(tài)===============》');
            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 掛載結(jié)束狀態(tài)===============》');
            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 更新前狀態(tài)===============》');
            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 更新完成狀態(tài)===============》');
            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); 
        },
        activated: function () {
            console.group('keep-alive 組件激活時調(diào)用===============》');
            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); 
        },
        deactivated: function () {
            console.group('keep-alive 組件停用時調(diào)用===============》');
            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 銷毀前狀態(tài)===============》');
            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 銷毀完成狀態(tài)===============》');
            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>
三鹰溜、用法
1.組件創(chuàng)建前
beforeCreate: function () {
  console.group('beforeCreate 創(chuàng)建前狀態(tài)===============》');
  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)  
},

這個階段主要是完成vue中關(guān)于生成周期以及事件的一些初始化工作,在這之前它會執(zhí)行一個mergeOptions函數(shù)臭杰,得到$options選項,并把它設(shè)置成Vue實例的一個屬性谚中。

如何在這個生命周期中拿到data
1.setTimeout 相當(dāng)于在初始化前告訴容器渴杆,等全執(zhí)行完了再跑里面的代碼寥枝。這種方式別說拿data了,拿渲染完DOM都OK~
2.直接從this.$ptions.data里去拿, 在beforeCreate前磁奖,所有的options都會先存到vm. options中囊拜,在beforeCreate之后,將options里的data啦比搭,props啦冠跷,methods啦等等一個個附到vm上。

2.組件創(chuàng)建完畢
created: function () {
  console.group('created 創(chuàng)建完畢狀態(tài)===============》');
  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); //已被初始化
},

在實例創(chuàng)建完成后被立即調(diào)用身诺。在這一步蜜托,實例已完成以下的配置:數(shù)據(jù)觀測 (data observer),屬性和方法的運算霉赡,watch/event 事件回調(diào)橄务。然而,掛載階段還沒開始穴亏,$el 屬性目前不可見仪糖。

一般在這個生命周期調(diào)用ajax訪問后臺接口獲取頁面初始化所需的數(shù)據(jù)。

3.組件掛載前
beforeMount: function () {
  console.group('beforeMount 掛載前狀態(tài)===============》');
  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); //已被初始化  
},

在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用迫肖。

4.組件掛載前
mounted: function () {
  console.group('mounted 掛載結(jié)束狀態(tài)===============》');
  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); //已被初始化 
},

el 被新創(chuàng)建的 vm.$el 替換,并掛載到實例上去之后調(diào)用該鉤子攒驰。

在模板渲染成html后調(diào)用蟆湖,通常是初始化頁面完成后,再對html的dom節(jié)點進(jìn)行一些需要的操作玻粪。

5.組件更新前
beforeUpdate: function () {
  console.group('beforeUpdate 更新前狀態(tài)===============》');
  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); 
},

數(shù)據(jù)更新時調(diào)用隅津,發(fā)生在虛擬 DOM 打補丁之前。這里適合在更新之前訪問現(xiàn)有的 DOM劲室,比如手動移除已添加的事件監(jiān)聽器伦仍。

6.組件更新后
updated: function () {
  console.group('updated 更新完成狀態(tài)===============》');
  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); 
},

由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補丁,在這之后會調(diào)用該鉤子很洋。

當(dāng)這個鉤子被調(diào)用時充蓝,組件 DOM 已經(jīng)更新,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作喉磁。然而在大多數(shù)情況下谓苟,你應(yīng)該避免在此期間更改狀態(tài)。如果要相應(yīng)狀態(tài)改變协怒,通常最好使用計算屬性watcher 取而代之涝焙。

7.組件銷毀之前
beforeDestroy: function () {
  console.group('beforeDestroy 銷毀前狀態(tài)===============》');
  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); 
},

實例銷毀之前調(diào)用。在這一步孕暇,實例仍然完全可用

8.組件銷毀完成
destroyed: function () {
  console.group('destroyed 銷毀完成狀態(tài)===============》');
  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)
}

Vue 實例銷毀后調(diào)用仑撞。調(diào)用后赤兴,Vue 實例指示的所有東西都會解綁定,所有的事件監(jiān)聽器會被移除隧哮,所有的子實例也會被銷毀桶良。

有些業(yè)務(wù)是離開頁面訪問后臺接口改變數(shù)據(jù)的,可以放在銷毀兩個生命周期中近迁。

完T_T

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艺普,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鉴竭,更是在濱河造成了極大的恐慌歧譬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搏存,死亡現(xiàn)場離奇詭異瑰步,居然都是意外死亡,警方通過查閱死者的電腦和手機璧眠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門缩焦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人责静,你說我怎么就攤上這事袁滥。” “怎么了灾螃?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵题翻,是天一觀的道長。 經(jīng)常有香客問我腰鬼,道長嵌赠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任熄赡,我火速辦了婚禮姜挺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彼硫。我一直安慰自己炊豪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布拧篮。 她就那樣靜靜地躺著溜在,像睡著了一般。 火紅的嫁衣襯著肌膚如雪他托。 梳的紋絲不亂的頭發(fā)上掖肋,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音赏参,去河邊找鬼志笼。 笑死沿盅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纫溃。 我是一名探鬼主播腰涧,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼紊浩!你這毒婦竟也來了窖铡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤坊谁,失蹤者是張志新(化名)和其女友劉穎费彼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體口芍,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡箍铲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鬓椭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颠猴。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖小染,靈堂內(nèi)的尸體忽然破棺而出翘瓮,到底是詐尸還是另有隱情,我是刑警寧澤裤翩,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布春畔,位于F島的核電站,受9級特大地震影響岛都,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜振峻,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一臼疫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扣孟,春花似錦烫堤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至利诺,卻和暖如春富蓄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慢逾。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工立倍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灭红,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓口注,卻偏偏與公主長得像变擒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寝志,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容娇斑,還有我對于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,052評論 0 29
  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,221評論 0 6
  • 春姑娘你悄悄來了 柳樹飄著美麗的長發(fā) 花朵們像十八歲的姑娘含包帶放 美女的笑聲漂亮艷麗的裙裝 拍照歡呼個個喜笑顏開...
    一切順其自然_9cef閱讀 212評論 0 0
  • 一 J是在K盯著他的第八秒,喜歡上他败富。 只是悔醋,那已經(jīng)是十一年前的學(xué)生時代了。 對面坐著的小戀人長開了很多兽叮,生得愈加...
    紫月臨晗閱讀 1,978評論 0 3
  • 也許因為年齡到了芬骄,今年尤其多的思考陪伴這個話題。主要是陪伴父母鹦聪。 在外地上學(xué)账阻,有時候只有寒假回家,待上一個月泽本,然后...
    Charismama閱讀 220評論 0 1