vue關於點擊詳情頁面keep-alive的緩存問題
點擊詳情頁面keep-alive的緩存問題
今天有個列表
點擊以後 進入詳情 然後在返回,再點擊其他的列表數據,詳情頁面請求的還是上一次請求的id 除非刷新才會請求現在的.
這樣子對用戶體驗感是非常不好滴,查瞭半天資料 發現瞭activated這個api
解決有些不需要被緩存的組件頁面 設置 activated 即可以再次進行事件的響應
vue中路由表單緩存(keep-alive)
vue 中從一個路由切換到另一個路由的時候,第一個路由可能有表單信息,但切換到第二個路由時,第一個路由裡的組件會被銷毀,表單裡填寫的 value 也會消失,keep-alive 就可以幫我們緩存我們不想被銷毀的組件。
頁面效果
父組件代碼
<!-- 如果沒有 include 屬性,那麼就會緩存全部子路由組件,這樣做是沒有必要的,隻緩存表單組件即可 --> <keep-alive include='News‘> <!-- 緩存多個組件的寫法 --> <!-- <keep-alive :include=['News','Massage']> --> <router-view></router-view> </keep-alive>
被緩存組件代碼
<template> <ul> <li>news001 <input type='text'></li> <li>news002 <input type='text'></li> <li>news003 <input type='text'></li> </ul> </template>
<script> export default { name: "News", }; </script>
那麼問題來瞭,如果在緩存組件開一個定時器,那麼切換到其他組件定時器永遠不會被銷毀,這樣運行效率會很低,那麼這時候我們需要兩個新的生命周期函數 activated 與 deactivated
<script> export default { name:'News', data(){ return { count:0, } }, activated(){ this.timer = setInterval(()=>{ this.count++ },20) }, deactivated(){ clearInterval(this.timer) } } </script>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- vue中keep-alive組件的用法示例
- vue中keepAlive組件的作用和使用方法詳解
- Vue實現前端頁面緩存的過程
- vue前端開發keepAlive使用詳解
- vue3緩存頁面keep-alive及路由統一處理詳解