前言:首先什麼是“前進重新整理後退不重新整理”呢,比如我有一個資料列表頁A、資料詳情頁B和其他頁面C,在瀏覽頁面A然後進入B以後,如果返回頁面A 那原來瀏覽的頁碼總要儲存吧,不能每次人家返回都要從第一頁開始重新翻,這就需要後退不重新整理了。 那麼前進不重新整理就是使用者從其他頁C進入A,自然是要從第一頁開始的,不需要儲存狀態所以要重新整理。
首先,先實現後退不重新整理來: 在vue-router中 有提供一個keep-alive的標籤,剛開始我也不知道這貨幹嘛用的 ,直到這次。 它的作用從字面意思就是儲存活性,即會儲存其中內容不會銷燬,用法:
這樣在路由離開當前頁的時候,元件就不會被銷燬了,但是也不是所有的頁面都需要儲存的,怎麼辦呢,這時候就需要條件來判斷了
1.在每個路由設定中的meta物件新增一個keepAlive屬性,如下:
2.然後前面的keep-alive換個用法,只在當前路由的keepalive屬性為true的時候才用keep-alive包裹
做到這一步,就實現了頁面不重新整理,但這個不重新整理是無腦的 並不是有選擇的,怎麼實現按照情況重新整理和不重新整理呢?那當然需要判斷條件了對不對,判斷什麼呢?判斷從哪個頁面進來的應該可以,我們們試試 在A頁面元件beforeRouteEnter(有關router的生命週期請自行查閱資料)鉤子中新增判斷, if(from.name === 'B'){},如果是從B頁面返回的那就從新獲取資料,但是問題來了。此時(beforeRouteEnter)無法獲取vue例項,所以不能在這裡直接呼叫元件的資料更新方法,所以我們需要在路由中meta物件新增一個requireAuth屬性(屬性名隨意)用來儲存判斷,然後在activated鉤子中(此時已經可以獲取this例項)通過判斷requireAuth來決定時候更新資料。如圖:
此時,頁面應該已經實現根據條件來決定是否重新整理資料。
我突然想到一個問題 既然在beforeRouteEnter中判斷時不能獲取this例項,導致需要在路由中存一個變數然後在activated中執行函式。那麼為什麼不在activated中直接判斷並執行呢???
哦好吧。 activated鉤子沒有from引數的樣子。。。。