vue單頁面,多路由,前進刷新,后退不刷新


最近終於忙里抽空,總結項目經驗了

index頁面包含三個鏈接導航。page1-->page2-->page3.依次前進,每次前進到一個新頁面都需要獲取數據,而按下后退鍵后,從page3返回到page2,page2不再獲取新數據,而是使用之前緩存的數據。從page2返回到page1時,page1不再獲取新數據,而是使用之前的數據。所以,page1和page2需要緩存,page3不需要緩存。可以把page1想象成首頁,page2想象成詳情頁,page3想象成訂單提交頁。這樣方便理解。

vue.app頁面

 

鈎子函數的執行順序

不使用keep-alive
beforeRouteEnter --> created --> mounted --> destroyed

使用keep-alive
beforeRouteEnter --> created --> mounted --> activated --> deactivated
再次進入緩存的頁面,只會觸發beforeRouteEnter -->activated --> deactivated 。created和mounted不會再執行

 

每次進入頁面,我們都需要知曉是從哪個頁面進來的,用以判斷是否需要獲取數據。以這個page1頁面為例,當我們知曉是從page2過來的,我們就可以認為是用戶操作了返回鍵,這時page1頁面就不需要再獲取新數據了,使用之前緩存的數據就可以了。如果是從別的頁面過來的,我們就需要獲取數據。

我們可以通過beforeRouteEnter這個鈎子函數中的from參數判斷是從哪個頁面過來的,這個參數執行時,組件實例還沒創建,所有不能在data中定義變量。我們可以在路由中定義一個變量,用來判斷

 

 

beforeRouteEnter中判斷是從哪個頁面過來的

判斷是從哪個路由過來的,如果是page2過來的,表明當前頁面不需要刷新獲取新數據,直接用之前緩存的數據即可

 

activated中執行getData這個獲取數據的方法

因為這個頁面需要緩存。只有第一次進入時才會執行created和mounted方法,再次進入就不執行了。而activated每次進入都執行,所以在這個鈎子函數中獲取數據。

 

第一次進入page1,能獲取新數據,從page2返回時,不再獲取新數據了,而是使用之前緩存的數據。但這樣還有一個問題,當用戶從page1進入page2后,因為某種原因,手動刷新了page2的頁面。這時再返回到page1,發現之前緩存的數據丟失了,而且也沒有再重新獲取。所以我們還需要再添加一個判斷條件,當用戶手動刷新頁面后,再返回時就需要重新獲取數據了。

如何添加這個條件,判斷用戶是否刷新了頁面呢?我們知道,當使用keep-alive后,只有第一次進入后會觸發created鈎子函數,再次進入就不再執行了。當用戶刷新了頁面,這個鈎子函數就會又執行,所以,我們可以利用這個小技巧來做點文章。

data中定義變量isFirstEnter用來判斷是否第一次進入,或是否刷新了頁面,默認false

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM