vue 組件來回切換時 記住上一個組件滾動位置(keep-alive)


記住組件滾動狀態:

使用場景:從某列表組件進入詳情頁,在返回的時候需要保留列表組件狀態,包括滾動的高度。這個時候需要keep-alive配合。

方法一:如下情況導航在做普遍用法。前提是使用keep-alive

keep-alive提供了兩個鈎子函數:

1. acvitaved:     keep-alive 組件激活時調用。

2. deactivated:  keep-alive 組件停用時調用。
 
用法: 先找到組件的最外層滾動的標簽的class或id。
export default { name: "docMng", //為了保存這個路由狀態
 data() { return { offsetTop: "" //獲取滾動位置,下次進來的時候,設置滾動高度為這個值
 }; }, activated() {
  // keep-alive組件 頁面進入的時候設置滾動高度 document.getElementById(
"mainContent").scrollTop = this.offsetTop; }, deactivated() { //keep-alive 組件停用時調用(簡單理解為組件離開的時候)。 // 獲取頁面滾動高度,這個鈎子有可能會拿不到數據,因為這個鈎子執行的慢,可以用beforeRouteLeave代替
   this.offsetTop = document.getElementById("mainContent").scrollTop;
},
 // beforeRouteLeave(to, from, next) {
// // 組件離開的時候,獲取頁面滾動高度
// // this.offsetTop = document.getElementById('mainContent').scrollTop;
// next()
 // },
};

 方法二:項目全局頁面滾動的情況,導航菜單在頂部的時候可以用此方法。(不必keep-alive也可以)

配合vue-router的scrollBehavior。直接在scrollBehavior里面設置滾動到某一位置是設置不上的,只能異步再加個定時。

savePosition輸出的是{x:0,y:0}滾動的距離。

總結:

方法一  優點:由於keep-alive,所以到指定滾動高度的時候是無感知的。       缺點:需要對每個想要此功能的組件寫相應代碼。

方法二  優點:全局控制代碼量少。        缺點:需要加定時才能,延時返回指定高度,顯得突兀不流暢。

兩種方法的采用完全看自己項目的設計排版,所以某一方法有時候是可以通用的。

 


免責聲明!

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



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