對于Vue中的activated生命周期函數(shù),大家可能不太熟悉。但是它在Vue的開發(fā)中,具有非常重要的作用。首先我們要明確,activated函數(shù)只有在Vue實例從有父級實例變成無父級實例(比如從router-view切出去)時才會被調用。此外,它只能在keep-alive已經(jīng)被使用時才能生效。
//使用keep-alive包裹組件//在組件中定義activated函數(shù) export default { activated() { //執(zhí)行相關操作 } }
那么,activated函數(shù)的作用是什么呢?通常情況下,我們使用它來判斷頁面是否需要重新渲染,或者執(zhí)行頁面重新渲染時需要的操作。
舉個例子,當我們在一個列表頁中,點擊進入某個詳情頁,再從詳情頁返回列表頁,我們需要確保返回到列表頁時,列表頁中的數(shù)據(jù)能夠及時更新。這時就可以使用activated函數(shù),判斷當前組件是否還未加載,或者列表頁需要重新更新數(shù)據(jù),只有當需要重新加載時,我們才會執(zhí)行相關渲染操作。
export default { data() { return { dataList: [] } }, async mounted() { await this.getData() }, activated() { if (!this.dataList.length) { this.getData() } }, methods: { async getData() { //請求數(shù)據(jù)并更新dataList } } }
以上代碼中,我們在mounted函數(shù)中發(fā)起請求,并將數(shù)據(jù)保存在dataList中。在activated函數(shù)中,我們判斷當前組件是否已經(jīng)有數(shù)據(jù),如果沒有,就再次發(fā)起請求更新數(shù)據(jù)。這樣,在返回到列表頁后,如果數(shù)據(jù)已經(jīng)更新,就不會再次請求;但是如果數(shù)據(jù)還未加載,就可以保證數(shù)據(jù)能夠及時顯示。
除了更新數(shù)據(jù),我們還可以使用activated函數(shù)來執(zhí)行其它相關操作。例如,當我們從列表頁進入詳情頁時,可以使用activated函數(shù)隱藏、銷毀當前音樂播放器等操作。這樣能夠提高頁面切換時的用戶體驗。
export default { mounted() { this.$refs.audio.play() }, activated() { this.$refs.audio.pause() }, destroyed() { this.$refs.audio.pause() } }
在以上代碼中,我們在mounted函數(shù)中播放音樂,并在activated函數(shù)中暫停音樂。這樣在從詳情頁返回列表頁時,音樂播放器也會暫停,而不是繼續(xù)播放。
總之,activated函數(shù)不僅可以用于更新數(shù)據(jù),還可以執(zhí)行其它相關操作。其作用范圍相對比較局限,但是它在Vue開發(fā)中的作用非常重要。因此,在使用keep-alive組件時,我們可以熟練地使用activated函數(shù),提升頁面間的跳轉效果。