vue生命週期鉤子函數詳細示例代碼GIF動態圖解釋

Vue 實例從創建到銷燬的過程,就是生命週期。也就是從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這是 Vue 的生命週期

1、 頁面渲染期

beforeCreate()  created()   頁面創建之前 / 完成

beforeMount()  mounted() 頁面掛載之前 / 完成

2、頁面更新期

beforeUpdate()  updated()  頁面更新之前 / 完成

3、頁面銷燬

beforeDestroy()  destroyed()  頁面銷燬之前  /  完成

動態演示圖

注意:當你銷燬vue實例後,再去掛載,你會發現,頁面更新期鉤子函數失效了

vue生命週期鉤子函數演示@JackieDYH

 

實例代碼 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="../node_modules/vue/dist/vue.js"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <input type="text" v-model="msg">
        <p>{{ msg }}</p>
    </div>
    <button class="destroy">銷燬</button>
    <button class="mount">掛載</button>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                msg:"vue生命週期"
            },
            // 1執行順序和聲明順序無關
            //頁面渲染期
            beforeCreate(){
                console.log('--------beforeCreate 創建之前--------');
                console.log('$el:',this.$el);//undefined
                console.log('$data:',this.$data);//undefined
                console.log('this.msg:',this.msg);//undefined
            },
            created(){
                console.log('--------created 創建完成--------');
                console.log('$el:',this.$el);//undefined
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期
            },
            beforeMount(){
                console.log('--------beforeMount 掛載之前--------');
                console.log('$el:',this.$el);//<div id="app">.值還沒有解析.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期
            },
            mounted(){
                console.log('--------mounted 掛載完成--------');
                console.log('$el:',this.$el);//<div id="app">.已經解析成data中對應值.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期
            },
            // 2頁面更新期
            beforeUpdate(){
                console.log('--------beforeUpdate 更新之前--------');
                console.log('$el:',this.$el);//<div id="app">.已經更新成data中對應值.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期更新了
            },
            updated(){
                console.log('--------updated 更新完成--------');
                console.log('$el:',this.$el);//<div id="app">.已經更新成data中對應值.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期更新了
            },
            // 3頁面銷燬
            beforeDestroy(){
                console.log('--------beforeDestroy 銷燬之前--------');
                console.log('$el:',this.$el);//<div id="app">.data中對應值.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期
            },
            destroyed(){
                console.log('--------destroyed 銷燬完成--------');
                console.log('$el:',this.$el);//<div id="app">.data中對應值.</div>
                console.log('$data:',this.$data);//Object
                console.log('this.msg:',this.msg);//vue生命週期
            }
        });
        // console.log(vm);
        const desBtn = document.querySelector(".destroy");
        const mouBtn = document.querySelector(".mount");
        desBtn.onclick = function(){
            vm.$destroy();//銷燬vue實例
        }
        mouBtn.onclick = function(){
            vm.$mount();//掛載vue實例 但 更新週期 不會執行了
        }
    </script>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章