這次帶給大家怎樣使用vue keep-alive請求數據,使用vue keep-alive請求數據的注意事項有哪些,下面就是實戰案例,一起來看一下。
index頁面:首頁品牌入口
list頁面:商品清單頁面
product頁面:商品詳情頁面
從index頁面進入list的時候要刷新頁面,從product頁面返回list的時候不需要刷新頁面,所以list使用了keep-alive的屬性,keepAlive設置為true,但是開發過程中發現一個問題,從product返回到list的時候,列表頁面不是正確的品牌列表,而是之前點擊的品牌列表。由於每個人遇到關於keep-alive請求資料不正確的問題不同,這裡就直接說我的解決辦法。希望能給大家一個思路。
解決方案
很多人都會透過修改keepAlive來改變keep-alive,我嘗試後還是不行,就換了個想法
鉤子函數的執行順序
不使用keep-alive
beforeRouteEnter --> created --> mounted --> ; destroyed
使用keep-alive
beforeRouteEnter --> created --> mounted --> activated --> deactivated
先掃盲,多少人和我都不知道上面的知識,在keep-alive的頁面中,可以在activated獲取this.$route.params的參數
避開了設定keepAlive導致product回傳的時候資料不對,當頁面進入list的時候都是快取狀態,然後再透過是不是由index進入來判斷是否執行activated裡的函數,
list.vue
beforeRouteEnter(to, from, next) { //判断从index页面进入,将list的isBack设置为true //这样就可以请求数据了 if (from.name == 'index') { to.meta.isBack = true; } next(); }, activated: function () { if (this.$route.meta.isBack || this.isFirstEnter) { //清理已有商品列表的数据,重新请求数据,如果不清除的话就会有之前的商品缓存,延迟显示最新的商品 this.proData = []; //请求数据 this.fetchData(); } //重新设置当前路由的isBack this.$route.meta.isBack = false; //重新设置是否第一次进入 this.isFirstEnter = false; }, mounted: function () { //如果是第一次进入,或者刷新操作的话,也请求数据 this.isFirstEnter = true; },
router.js
const appRouter = { mode: "history", base: "/m/", routes: [ { path: "", redirect: "/index" }, { path: "/index", name: "index", component: Index, meta: { keepAlive: true } }, { path: "/list", name: "list", component: List, meta: { keepAlive: true, isBack: false //isback是true的时候请求数据,或者第一次进入的时候请求数据 } }, { path: "/product/:id", name: "product", component: Product, meta: { keepAlive: false } } ] }; Vue.use(Router); export default new Router(appRouter);
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
如何操作vue input輸入校驗字母數字組合且長度小於30
以上是怎樣使用vue keep-alive請求數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!