溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue 實現(xiàn)前進刷新,后退不刷新的效果

發(fā)布時間:2020-07-25 18:11:11 來源:網(wǎng)絡 閱讀:336 作者:fcxyfc 欄目:開發(fā)技術

需求一:
在一個列表頁中,第一次進入的時候,請求獲取數(shù)據(jù)。

點擊某個列表項,跳到詳情頁,再從詳情頁后退回到列表頁時,不刷新。

也就是說從其他頁面進到列表頁,需要刷新獲取數(shù)據(jù),從詳情頁返回到列表頁時不要刷新。

解決方案

在 App.vue設置:

    <keep-alive include="list">
        <router-view/>
    </keep-alive>

假設列表頁為 list.vue,詳情頁為 detail.vue,這兩個都是子組件。

我們在 keep-alive 添加列表頁的名字,緩存列表頁。

然后在列表頁的 created 函數(shù)里添加 ajax請求,這樣只有第一次進入到列表頁的時候才會請求數(shù)據(jù),當從列表頁跳到詳情頁,再從詳情頁回來的時候,列表頁就不會刷新。
這樣就可以解決問題了。

需求二:
在需求一的基礎上,再加一個要求:可以在詳情頁中刪除對應的列表項,這時返回到列表頁時需要刷新重新獲取數(shù)據(jù)。

我們可以在路由配置文件上對 detail.vue 增加一個 meta 屬性。

    {
       path: '/detail',
       name: 'detail',
       component: () => import('../view/detail.vue'),
       meta: {isRefresh: true}
   },

這個 meta 屬性,可以在詳情頁中通過 this.$route.meta.isRefresh 來讀取和設置。

設置完這個屬性,還要在 App.vue 文件里設置 watch 一下 $route 屬性。

watch: {
   $route(to, from) {
       const fname = from.name
       const tname = to.name
       if (from.meta.isRefresh || (fname != 'detail' && tname == 'list')) {
           from.meta.isRefresh = false
               // 在這里重新請求數(shù)據(jù)
       }
   }

},
這樣就不需要在列表頁的 created 函數(shù)里用 ajax 來請求數(shù)據(jù)了,統(tǒng)一放在 App.vue 里來處理。

觸發(fā)請求數(shù)據(jù)有兩個條件:

從其他頁面(除了詳情頁)進來列表時,需要請求數(shù)據(jù)。
從詳情頁返回到列表頁時,如果詳情頁 meta 屬性中的 isRefresh 為 true,也需求重新請求數(shù)據(jù)。

當我們在詳情頁中刪除了對應的列表項時,就可以將詳情頁 meta 屬性中的 isRefresh 設為 true。這時再返回到列表頁,頁面會重新刷新。

如果文章對您有幫助,記得動動手指關注我喲

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI