Vue的生命周期

為什么要了解vue 的生命周期

如果只是了解vue的語(yǔ)法,也可以根據(jù)你的想法實(shí)現(xiàn)自己的需求,但是一旦出現(xiàn)問(wèn)題,就要借助于生命周期去尋找原因,解決問(wèn)題。另外,有一些需求也需要我們通過(guò)生命周期來(lái)實(shí)現(xiàn),決定我們把方法寫在哪個(gè)周期里。

生命周期

vue官網(wǎng)對(duì)生命周期有個(gè)詳細(xì)的解釋,如圖:


生命周期

圖中紅色部分是生命周期涉及到的鉤子函數(shù)。

鉤子函數(shù)

首先是第一個(gè)鉤子函數(shù)。

beforeCreate:此時(shí)vue對(duì)象還沒(méi)有產(chǎn)生,具體應(yīng)用中,可以在此處做一些類似加載動(dòng)畫的東西。

緊接著是created。

created:此時(shí)組件已經(jīng)被創(chuàng)建好,屬性也已經(jīng)被綁定,但是此時(shí)DOM還并未生成,el屬性還不存子啊。此時(shí)可以做什么呢?此時(shí)可以獲取一些對(duì)應(yīng)的數(shù)據(jù),比如請(qǐng)求網(wǎng)絡(luò)接口,把從接口獲取的數(shù)據(jù)賦給屬性,以便在DOM里展示,通常也會(huì)在此時(shí)結(jié)束上一步里的加載動(dòng)畫等操作。

再往下,會(huì)查找是否有el屬性。el屬性即:



如果有,會(huì)繼續(xù)檢查是否有template屬性;如果沒(méi)有,會(huì)檢查new Vue后面是否有el屬性,即:


如果兩者都沒(méi)有el屬性,聲明周期就結(jié)束了。如果有一個(gè),進(jìn)行下一步,檢查是否有template。
繼續(xù)往下,如果有template組件,則會(huì)執(zhí)行render方法,來(lái)渲染template中對(duì)應(yīng)的內(nèi)容;



如果沒(méi)有template組件,查看是否有el外部的html標(biāo)簽可以作為template編譯:



如果兩者都沒(méi)有,生命周期結(jié)束,因?yàn)闆](méi)有可以渲染的內(nèi)容。

然后進(jìn)入下一個(gè)鉤子函數(shù)。

beforeMount:此時(shí)開始編譯template中的內(nèi)容,但是實(shí)在虛擬DOM中執(zhí)行,也就是說(shuō),此時(shí)還不能看到頁(yè)面。

編譯之后開始掛載。之后是mounted

mounted:此方法結(jié)束的時(shí)候,頁(yè)面已經(jīng)顯示。如果有一些內(nèi)容是需要頁(yè)面顯示之后再操作的,就可以卸載mounted函數(shù)里面。比如,如果需要在當(dāng)前頁(yè)面顯示之后再獲取數(shù)據(jù),就可以寫在此處。

掛載之后,DOM生成,此時(shí)便可以對(duì)DOM進(jìn)行操作,比如增刪改查數(shù)據(jù)之類的。

beforedUpdate:更新組件之前,更新之前如果要進(jìn)行一些操作的話,可以在此處實(shí)現(xiàn),比如刷新動(dòng)畫。

updated:更新完成,頁(yè)面已經(jīng)展示。一般情況下,如果需要在當(dāng)前組件中做一些改變的話,可以調(diào)用此函數(shù)。

接著如生命周期的尾部。

beforeDestory:銷毀之前。

destoryed:銷毀,生命周期結(jié)束。

示例

下面的代碼,可以直觀的展示生命周期里鉤子函數(shù)執(zhí)行的順序。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <h2>{{message}}</h2>
    <button @click ="changeText">改變文字</button>
</div>
<script src="vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            message:'你好啊',

        },
        methods:{
            changeText:function(){
                this.message += ' 蝙蝠俠!'
            }
        },
        beforeCreated:function(){
            alert("組件實(shí)例化之前執(zhí)行的函數(shù)")
        },
        created:function(){
            alert('組件實(shí)例化完成,但頁(yè)面未顯示')
        },
        beforeMount:function(){
            alert('組件掛載前,頁(yè)面未顯示,但虛擬DOM已經(jīng)配置')
        },
        mounted:function(){
            alert('組件掛載后,頁(yè)面顯示')
        },
        beforeUpdate:function(){
            alert('組件更新前,頁(yè)面未更新,虛擬DOM已經(jīng)配置')
        },
        updated:function(){
            alert('組件更新后,頁(yè)面已更新')
        },
        beforeDestory:function(){
            alert('組件銷毀前')
        },
        destroyed:function(){
            alert('組件銷毀后')
        }
    })
</script>

</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容