1. 程式人生 > >Vue中的生命週期(淺談)

Vue中的生命週期(淺談)

Vue中的宣告週期是什麼?

vue例項從建立到銷燬的過程稱之為vue的生命週期

 

用Vue框架,熟悉它的生命週期可以讓開發更好的進行。

首先先看看官網的圖,詳細的給出了vue的生命週期:

 

 接下來我們就根據上面那張圖來分析分析模擬一下執行生命週期

它可以總共分為8個階段:

beforeCreate(建立前),

created(建立後),

beforeMount(載入前),

mounted(載入後),

beforeUpdate(更新前),

updated(更新後),

beforeDestroy(銷燬前),

destroyed(銷燬後)

<!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>life cycle</title>
    <script src="./node_modules/vue/dist/vue.min.js"></script>
</head>

<body>
    <div class="container">
        <button @click = "msg = '我是updated週期'"></button>
        {{ msg }}
    </div>
</body>
    <script>
        // 我們可以看圖
        // https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA

        let vue = new Vue({
            el : ".container",
            data : {
                msg : "咳咳咳,lifecycle"
            },
            methods : {
                show() {
                   return "我是lifecycle methods";
                }
            },
            // #####    元件建立的生命週期
            // 1.首先我們建立了一個vue 例項new Vue    var vue = new Vue
            // 2.我們遇到的第一個生命週期
            //      beforeCreate    初始化vue 例項 只有預設的一些生命週期函式和
            //      預設事件,其它都為建立好
            //      在beforeCreate的時候  data和methods還沒有初始化

            beforeCreate () {
                console.log(this.msg);
                console.log(this.show);
                // 輸出undefined
            },

            // 3.遇到第二個生命週期created     data和methods都已經初始化完畢
            //          如果要操作data和methods的資料最好在created中操作
            created() {
                console.log(this.msg);//輸出 咳咳咳,lifecycle
                console.log(this.show()); //輸出  我是lifecycle methods
            } ,     

            // 4.我們進入判斷,有 `el` 嗎? 有  在繼續問有template嗎?  
            // 有    將模板編譯成function
            // 沒有   自動編譯成模板
            // 這個編輯模板   把vue的指令都執行完畢形成一個最終的字串模板存放在
            // 記憶體當中,只是渲染好了模板,並沒有掛載到DOM樹上面


            // 5.我們遇到第三個生命週期函式  beforeMount
            // 這個時候我們的模板還在記憶體當中,並沒有渲染到頁面當中
            // 所以這個時候的資料還是舊的
            beforeMount() {
                console.log(document.querySelector(".container").innerText);
                //輸出 {{ msg }}
                // 這個時候頁面是之前的html資料
                // 並沒有渲染新的資料
            },
            // 6.我們遇到了第四個生命週期函式 Mounted
            // 這個時候我們的頁面資料已經render最新的了
            // 表示例項化完畢
            // 元件建立生命週期結束
            // 開始執行生命週期階段
            mounted() {
                console.log(document.querySelector(".container").innerText);  
                //輸出 哈哈,我是lifecycle   
            },
            // 7.##########我們開啟   執行元件生命週期階段(資料更新才執行)
            
            // 執行生命週期可以執行次數 0 - 正無求大
            // 因為資料沒更新就不會執行  而且資料可以一直更新
            // 7.1  首先我們要判斷資料有沒有進行        頁面之間的資料的傳遞 資料發生改變了嗎
            //      經歷了資料執行了嗎
            // beforeUpdate生命週期階段
            // 這個時候我們的資料進行了改變
            // 但是beforeUpdate階段的頁面上的資料還是舊的  並沒有渲染新資料
            beforeUpdate() {
                console.log(document.querySelector(".container").innerText);
                // 頁面上的資料是: 哈哈哈,lifecycle
                console.log(this.msg);
                // 而元件裡面的資料是:  我是updated週期
            },
            
            // 8.我們遇到的生命週期     updated
            // 這個時候頁面上的資料是最新的   進行了更新
            // 進行了  M層 ->   V層的更新
            updated() {
                console.log(document.querySelector(".container").innerText);
                // 頁面上的資料是: 我是updated週期
                console.log(this.msg);
                // 而元件裡面的資料是:  我是updated週期
            },

            // 9.我們的元件執行生命週期結束
            // #########開始執行銷燬生命週期
            /*
            beforeDestroy   當執行已經進行了銷燬lifecycle階段   
                            但是data,methods,filters,directives等等還並沒有銷燬
                            都是出於可執行狀態

            destroyed       當執行到destroyed周期函式的時候,元件已經完全被銷燬了
                            data,methods,filters,directives等等都不可用

            */

        });
        
    
    </script>


</html>

這就是我對生命週期的理解,很簡單吧。

想看更多點選我的部落格

推薦vue快速生成程式碼片段