<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們把一個物件從生成(new)到被銷燬(destory)的過程,稱為生命週期。而生命週期函數,就是在某個時刻會自動執行的函數。
按照官方的原話,就是每個 Vue 範例在被建立時都要經過一系列的初始化過程——例如,需要設定資料監聽、編譯模板、將範例掛載到 DOM 並在資料變化時更新 DOM 等。同時在這個過程中也會執行一些叫做生命週期勾點的函數,這給了使用者在不同階段新增自己的程式碼的機會。
簡單來說就是每個Vue範例在被建立時都要經過一系列的初始化過程:建立範例,裝載模板,渲染模板等。Vue為生命週期中的每個狀態都設定了勾點函數(監聽函數) 。每當Vue範例處於不同的生命週期時,對應的函數就會被觸發呼叫。
函數 | 呼叫時間 |
beforeCreate | vue範例初始化之前呼叫 |
created | vue範例初始化之後呼叫 |
beforeMount | 掛載到DOM樹之前呼叫 |
mounted | 掛載到DOM樹之後呼叫 |
beforeUpdate | 資料更新之前呼叫 |
updated | 資料更新之後呼叫 |
beforeDestroy | vue範例銷燬之前呼叫 |
destroyed | vue範例銷燬之後呼叫 |
下面是官方檔案裡的生命週期圖,英語好的同學可以看看:
先看案例基本程式碼如下,後面通過如下程式碼步驟演示一個物件從生成到被銷燬的過程各階段執行的生命週期函數。注意show函數的作用。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://unpkg.com/vue/dist/vue.js"></script> </head> <body> <div id="app"> {{information}} </div> <script type="text/javascript"> //建立vue範例 var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' } }) // 各個生命週期函數通過呼叫下面這個函數了解其所處的生命階段 function show(inf,obj){ console.log(inf); console.log("------------------------------------------"); console.log('獲取vue範例data裡的資料:'); console.log(obj.information); console.log("------------------------------------------"); console.log('掛載的物件,就是DOM:'); console.log(obj.$el); console.log("------------------------------------------"); console.log('頁面上已經掛載的DOM:'); console.log(document.getElementById('app').innerHTML); } </script>
這個階段vue範例剛剛在記憶體中建立,此時data和methods這些都沒初始化好。
在案例中新增beforeCreate勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, beforeCreate: function(){ // 傳入該階段簡介與this,this就是該階段的vue範例 show('vue範例初始化之前',this); } })
看執行結果:
可以看到,此時vue範例剛剛在記憶體中建立,其它什麼都undefined。
這個階段vue範例在記憶體中已經建立好了,data和methods也能夠獲取到了,但是模板還沒編譯。
在案例中新增created勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, created: function(){ show('vue範例初始化之後',this); } })
看結果:
看到沒,已經知道data裡的資料了。其它的話都沒。
這個階段完成了模板的編譯,但是還沒掛載到頁面上。
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, beforeMount: function(){ show('掛載之前',this); } })
看結果:
看到沒,要掛載的物件都編譯好了,但是頁面的DOM樹還沒掛上去,這個階段頁面還沒能顯示出來。
這個階段,模板編譯好了,也掛載到頁面中了,頁面也可以顯示了。
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, mounted: function(){ show('掛載之後',this); } })
看結果:
轉態更新之前執行此函數,此時data中資料的狀態值已經更新為最新的,但是頁面上顯示的資料還是最原始的,還沒有重新開始渲染DOM樹。
先改變data裡資料:
vm.information = '南極光之夜';
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, beforeUpdate: function(){ show('更新之前',this); } })
看結果:
看到沒,vue範例裡的資料已經變成了南極光之夜。但是此階段頁面DOM節點上顯示的還是初始的資料北極光之夜。
這個階段是轉態更新完成後執行此函數,此時data中資料的狀態值是最新的,而且頁面上顯示的資料也是最新的,DOM節點已經被重新渲染了。
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, updated: function(){ show('更新之後',this); } })
看執行結果:
更新了,全都更新了~
beforeDestroy階段處於vue範例被銷燬之前,當然,這個階段vue範例還能用。
銷燬Vue範例:
vm.$destroy();
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, beforeDestroy: function() { show('銷燬之前',this); } })
看效果:
這個階段在vue範例銷燬後呼叫,此時所有範例指示的所有東西都會解除繫結,事件監聽器也都移除,子範例也被銷燬。
在案例中新增勾點函數:
var vm = new Vue({ el: '#app', data: { information: '北極光之夜。' }, destroyed: function() { show('銷燬之後',this); } })
看結果:
到此這篇關於一文搞懂Vue八大生命週期勾點函數的文章就介紹到這了,更多相關Vue八大生命週期勾點函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45