1. 程式人生 > >vue單頁 使用keep-alive頁面返回不重新整理

vue單頁 使用keep-alive頁面返回不重新整理

使用vue單頁開發專案時遇到一個很噁心的問題:在列表頁點選一條資料進入詳情頁,按返回鍵返回列表頁時頁面重新整理了,使用者體驗非常差啊!!!查閱了一下相關問題,使用<keep-alive>解決這個問題,下面是我的使用心得。

<keep-alive>是Vue的內建元件,能在元件切換過程中將狀態保留在記憶體中,防止重複渲染DOM。

首先在App.vue頁面上有下面一段程式碼,我們都知道這是頁面渲染的地方

<router-view></router-view>

把這段程式碼改成如下:

<keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

我們能看到這段程式碼做的邏輯判斷,當路由的meta屬性的keepAlive屬性值為true時頁面的狀態儲存,其他情況下不儲存狀態。

然後就是給我們路由設定keepAlive屬性值,比如我是給主頁(列表頁)的路由設定了keepAlive屬性為true。

{
        name: 'index',
        path: '/index',
        title: '主頁',
        component(resolve) {
            require(['views/index.vue'], resolve)
        },
        meta: {
            pageTitle: '主頁',
            keepAlive: true
        }
    }


這樣設定了之後,主頁的狀態就會儲存,返回鍵返回到主頁時頁面不會重新整理請求資料了。

但是有問題啊!!!從主頁跳到任何頁面,再返回主頁都不會重新整理頁面!這並不是我想要的,我只要從詳情頁返回列表頁時不重新整理頁面,其他情況下是需要重新整理的,那麼我就需要定製化處理了。大致思路就是從主頁跳轉到其他頁面時把主頁的keepAlive值設定為false,從詳情頁返回主頁時把主頁的keepAlive值設定為true就好了,程式碼如下:

主頁跳轉到其他頁面時把主頁的keepAlive值設定為false

export default {
    data() {
        return {
        };
    },
    mounted() {
    },
    methods: {
    },
    //修改列表頁的meta值,false時再次進入頁面會重新請求資料。
    beforeRouteLeave(to, from, next) {
        from.meta.keepAlive = false;
        next();
    }
};


從詳情頁返回主頁時把主頁的keepAlive值設定為true(要做個判斷,判斷是不是返回到主頁的)
export default {
    data() {
        return {
        };
    },
    mounted() {
    },
    methods: {
    },
    beforeRouteLeave(to, from, next) {
      if (to.path == "/index") {
        to.meta.keepAlive = true;
      } else {
        to.meta.keepAlive = false;
      }
      next();
    }
};


這裡使用了beforeRouterLeave(to,from,next){},它是methods平級的,具體使用方法可以查閱一下。

注意問題:

beforeRouterLeave必須寫在有配置路由的頁面上才有效的,最開始我想寫在App.vue頁面上,發現根本就不執行的!

相關推薦

解析Vue使用keep-alive頁面返回重新整理的問題

使用vue單頁開發專案時遇到一個很困惑的問題:在列表頁點選一條資料進入詳情頁,按返回鍵返回列表頁時頁面重新整理了,使用者體驗非常差啊!!!使用<keep-alive>解決這個問題,下面是我的使用心得。 <keep-alive>是Vue的內建元件,能在元件切換過程中將狀態保留

vue 使用keep-alive頁面返回重新整理

使用vue單頁開發專案時遇到一個很噁心的問題:在列表頁點選一條資料進入詳情頁,按返回鍵返回列表頁時頁面重新整理了,使用者體驗非常差啊!!!查閱了一下相關問題,使用<keep-alive>解決這個問題,下面是我的使用心得。 <keep-alive>是V

完美解決微信頁面返回重新整理問題

       新到的這家公司業務重點是放在移動端的(以前很少做微信平臺相關的頁面),比如微信,小程式,支付寶等等平臺。所以頁面的製作難免和移動端打交道。現在就遇到一個小問題,但是又很不好解決的一個問題:就是從一個頁面跳到另外一個頁面,然後再按虛擬鍵返回時(小米手機左右滑動),

vue應用中 返回列表記住上次滾動位置、keep-alive快取之後更新列表資料 那點事

實踐場景需求 產品列表中,滾動到一定位置的時候,點選檢視產品資訊,後退之後,需要回到原先的滾動位置,這是常見的需求 所有頁面均在router-view中,暫時使用了keep-alive來快取所有頁面,所以進入不同分類的產品列表,和不同的產品詳情頁面,需要更新資料 首先注意: 本次實踐測試環境為pc

vue快取實現方案分析keep-alive

behind   vue單頁快取實現方案分析 實現前進重新整理,返回不重新整理的功能,並且返回時可以記住上一頁的滾動位置,有兩套方案可選   方案一:vue的keep-alive元件   具體使用如下: <ke

vue keep-alive頁面位置

eve win page set ons app 生命 and TP 從列表中點擊某一按鈕,進入詳情頁面,需要記住列表頁當前的位置:       1、需要為 想被記住位置的組件設置緩存,如上圖,也可以在app.vue中進行全局設置    2、在列表頁面添加方法:      

vue應用前進刷新後退刷新方案探討

nested 規則 meta route 獲取 事先 ejs 啟用 ive 引言 前端webapp應用為了追求類似於native模式的細致體驗,總是在不斷的在向native的體驗靠攏;比如本文即將要說到的功能,native由於是多頁應用,新頁面可以啟用一個的新的webvie

vue 應用點擊某個鏈接,跳轉到新頁面的方式

subst ams out 詳情 targe god str blank attribute <router-link class="goDetail" :to="{name: ‘detail‘,params: {id:item.id}}" target = _bl

vue應用前進重新整理後退重新整理方案探討

引言 前端webapp應用為了追求類似於native模式的細緻體驗,總是在不斷的在向native的體驗靠攏;比如本文即將要說到的功能,native由於是多頁應用,新頁面可以啟用一個的新的webview來開啟,後退其實是關閉當前webview,其上一個webview就自然顯示出來;但是在單頁的webapp應用中

vue應用中,使用setInterval()定時向伺服器獲取資料,後來跳轉頁面後,發現還在不停的獲取資料。

使用VUE開發單頁專案時遇到這樣的問題,mounted中使用setInterval()定時向伺服器獲取資料,後來跳轉頁面後,發現還在不停的獲取資料。我以為是因為我路由用的push導致的,改成replace也是這樣,後來就在部落格園找到答案了,如下: http://www.cnblogs.com/zzbp/p/

Vue 應用 動態修改頁面 title

使用 Vue + VueRouter 開發單頁應用時,有些需要修改頁面 title 的場景,可以通過在 router 中新增 meta 元資訊來實現: routes: [{ name: 'home', path: '/home/:openname',

vue路由在keep-alive下的刷新問題

但是 ansi router 屬性 mode 建議 類型 生命周期 路由 問題描述:   在keep-alive中的在跳轉到指定的路由時刷新對應的路由,其余不刷新。 <transition name="fade" mode="out-in"> <k

vue緩存組件

頁緩存 current vue run eno 就會 問題 live gist 實現前進刷新,返回不刷新的功能,並且返回時可以記住上一頁的滾動位置,有兩套方案可選 第一套方案:vue的keep-alive組件,vue-router提供的scrollbeheavior API

Vue應用中Element ui中的el-tree選功能

      在VUE單頁應用專案開發過程樹形中有一個需求,需要選中樹形控制元件(可以是點選選中行或者複選框),但是隻能選中一個。控制元件使用的是Element ui中的el-tree,但是找了一下並沒有單選元件的API,慢慢琢磨中。 &nbs

Vue中 key keep-alive的實現原理

入門到 java border 保存 tab clu 創建 培訓 activated vue2.0提供了一個keep-alive組件用來緩存組件,避免多次加載相應的組件,減少性能消耗 keep-aliv是Vue.js的一個內置組件。它能夠不活動的組件實例保存在內存中,而不是

vue重新整理vuex丟失問題

1. 產生原因 其實很簡單,因為store裡的資料是儲存在執行記憶體中的,當頁面重新整理時,頁面會重新載入vue例項,store裡面的資料就會被重新賦值。 2. 解決思路 一種是state裡的資料全部是通過請求來觸發action或mutation來改變 一種是將state裡的資料儲存一份到本

在移動端使用vue-router和keep-alive

對於web開發和移動端開發,兩者在路由上的處理是不同的。對於移動端來說,頁面的路由是相當於棧的結構的。vue-router與keep-alive提供的路由體驗與移動端是有一定差別的,因此常常開發微信公眾號的我想通過一些嘗試來將兩者的體驗拉近一些。 目標 問題 首先一個問題是keep-alive

vue——路由變化頁面資料重新整理問題

每天記錄一點點,把我遇到的問題記錄下來, 希望可以幫助到更多和我遇到同樣問題的人。 問題描述:通過調介面,動態顯示幫助頁面的問題列表, 問題列表有多級,當點選的這個問題沒有下一級問題的時候跳入內容頁。 問題出在,我在電腦上做移動端頁面的時候,相繼跳到詳情頁,我想返回,點選 按鈕