vue實現前進重新整理,後退不重新整理

2021-09-30 19:01:16 字數 1542 閱讀 6156

專案中客戶提出返回列表頁需要快取之前查詢的資料,用到了以下方法解決了這個需求

實現思路:

注:demo中,index頁面包含三個鏈結導航。page1-->page2-->page3.依次前進,每次前進到乙個新頁面都需要獲取資料,而按下後退鍵後,從page3返回到page2,page2不再獲取新資料,而是使用之前快取的資料。從page2返回到page1時,page1不再獲取新資料,而是使用之前的資料。所以,page1和page2需要快取,page3不需要快取。可以把page1想象成首頁,page2想象成詳情頁,page3想象成訂單提交頁。這樣方便理解。

利用keep-alive 快取需要快取的頁面

在router/index.js中新增路由元資訊,設定需要快取的頁面

routes: [

},},},}

]

鉤子函式的執行順序

不使用keep-alive

beforerouteenter --> created --> mounted --> destroyed

使用keep-alive

beforerouteenter --> created --> mounted --> activated --> deactivated

再次進入快取的頁面,只會觸發beforerouteenter -->activated --> deactivated 。created和mounted不會再執行。我們可以利用不同的鉤子函式,做不同的事。務必理解上述鉤子函式的執行時機和執行順序,本教程的核心就依賴於此鉤子函式

activated和deactivated是使用keep-alive後,vue中比較重要的兩個鉤子函式,建議詳細了解下。

需快取的頁面的寫法

注:demo中的page1和page2,這兩個頁面都需要快取,思路一樣,以下以page1為例,page2不再贅述。

示例檔案:components/page1.vue

data中初始化乙個str字串,存放從後台獲取的資料

data() ;

}

methods中建立乙個方法,模擬從後台獲取資料

methods: 

}

修改router/index.js中的配置

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

我們可以通過beforerouteenter這個鉤子函式中的from引數判斷是從哪個頁面過來的,這個引數執行時,元件例項還沒建立,所有不能在data中定義變數。我們可以在路由中定義乙個變數,用來判斷。

在router/index.js的meta中新增isback變數,預設false

},},

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

後退,重新整理,前進js按鈕

上面的重新整理只是本頁面重新整理,如果頁面時幾個frame拼成的 現在假設top.htm 即上面的頁面 有七個button來實現對bottom.htm 即下面的頁面 的重新整理,可以用以下七種語句,哪個好用自己看著辦了。語句1.window.parent.frames 1 location.relo...

Selenium 六 後退前進重新整理

webdriver的api提供了以下方法實現瀏覽器的後退前進以及重新整理 back 後退 forward 前進 refresh 重新整理 案例演示 from selenium import webdriver driver webdriver.chrome first url print now a...

vue實現前進後退保持頁面狀態,不被重新整理

在當前頁面進行一些操作,然後需要跳轉到其他頁面進行操作並取得結果,再返回到當前頁面繼續操作,此時需要保持當前頁面不被重新整理,才能繼續進行操作。但是由於vue的動態元件機制,跳轉頁面時會銷毀當前元件再建立其他頁面,如果需要儲存頁面狀態,就需要將頁面快取起來,再次進入的時候從快取裡讀取即可。keep ...