Vue實例有一個完整的生命周期,也就是說從開始創(chuàng)建昆婿、初始化數(shù)據(jù)球碉、編譯模板、掛在DOM仓蛆、渲染-更新-渲染睁冬、卸載等一系列過程,我們成為Vue 實例的生命周期看疙,鉤子就是在某個階段給你一個做某些處理的機會豆拨。
生命周期圖
生命周期文字解析
beforeCreate( 創(chuàng)建前 )
在實例初始化之后,數(shù)據(jù)觀測和事件配置之前被調(diào)用能庆,此時組件的選項對象還未創(chuàng)建施禾,el 和 data 并未初始化,因此無法訪問methods搁胆, data弥搞, computed等上的方法和數(shù)據(jù)。
created ( 創(chuàng)建后 )
實例已經(jīng)創(chuàng)建完成之后被調(diào)用丰涉,在這一步,實例已完成以下配置:數(shù)據(jù)觀測斯碌、屬性和方法的運算一死,watch/event事件回調(diào),完成了data 數(shù)據(jù)的初始化傻唾,el沒有投慈。 然而承耿,掛在階段還沒有開始, $el屬性目前不可見,這是一個常用的生命周期伪煤,因為你可以調(diào)用methods中的方法加袋,改變data中的數(shù)據(jù),并且修改可以通過vue的響應(yīng)式綁定體現(xiàn)在頁面上抱既,职烧,獲取computed中的計算屬性等等,通常我們可以在這里對實例進行預(yù)處理防泵,也有一些童鞋喜歡在這里發(fā)ajax請求蚀之,值得注意的是,這個周期中是沒有什么方法來對實例化過程進行攔截的捷泞,因此假如有某些數(shù)據(jù)必須獲取才允許進入頁面的話足删,并不適合在這個方法發(fā)請求,建議在組件路由鉤子beforeRouteEnter中完成
beforeMount
掛在開始之前被調(diào)用锁右,相關(guān)的render函數(shù)首次被調(diào)用(虛擬DOM)失受,實例已完成以下的配置: 編譯模板,把data里面的數(shù)據(jù)和模板生成html咏瑟,完成了el和data 初始化拂到,注意此時還沒有掛在html到頁面上。
mounted
掛在完成响蕴,也就是模板中的HTML渲染到HTML頁面中谆焊,此時一般可以做一些ajax操作,mounted只會執(zhí)行一次浦夷。
beforeUpdate
在數(shù)據(jù)更新之前被調(diào)用辖试,發(fā)生在虛擬DOM重新渲染和打補丁之前,可以在該鉤子中進一步地更改狀態(tài)劈狐,不會觸發(fā)附加地重渲染過程
updated(更新后)
在由于數(shù)據(jù)更改導(dǎo)致地虛擬DOM重新渲染和打補丁只會調(diào)用罐孝,調(diào)用時,組件DOM已經(jīng)更新肥缔,所以可以執(zhí)行依賴于DOM的操作莲兢,然后在大多是情況下,應(yīng)該避免在此期間更改狀態(tài)续膳,因為這可能會導(dǎo)致更新無限循環(huán)改艇,該鉤子在服務(wù)器端渲染期間不被調(diào)用
beforeDestroy(銷毀前)
在實例銷毀之前調(diào)用,實例仍然完全可用坟岔,
這一步還可以用this來獲取實例谒兄,
一般在這一步做一些重置的操作,比如清除掉組件中的定時器 和 監(jiān)聽的dom事件
destroyed(銷毀后)
在實例銷毀之后調(diào)用社付,調(diào)用后承疲,所以的事件監(jiān)聽器會被移出邻耕,所有的子實例也會被銷毀,該鉤子在服務(wù)器端渲染期間不被調(diào)用