關於填坑vue的前進刷新與後退不刷新,網上有不少方法,基本都是利用 keep-alive,可是試了好多種方法都不盡人意,後來有人提示說基於keepalive include,試驗了一下找到了些思路,暫時實驗可行,分享下共同探討學習,也許不是最佳解決方案,但確實有效。這裏須要用到vuex,如不用vuex能夠自行用Local Storage代替。vue
<keep-alive :include="includeds"> <router-view></router-view> </keep-alive>
computed:{ includeds(){ return this.$store.state.includeds } }
state: { includes: '' }, mutations: { setIncludeds(state,setdata){ state.includeds = setdata } }
router.beforeEach((to, from, next) => { let addPage = ['addProduct','newEdit','showNews']; if (!mCd.inArray(to.name,addPage)) { //此處mCd.inArray的方法爲判斷數組是否包含,須要本身實現。 store.commit('setIncludeds',''); } next(); })
export default{ name: 'news', data() { return { .... } }, activated(){ this.$store.commit('setIncludeds','news'); //此處設置name一致的名稱 } }
*注意:此處activated裏設置的commit裏第二個參數,必須與name名稱一致。
1. 經過設置keepalive 的 include,固然也能夠設置exclude,自行百度。include爲要緩存的頁面name 2. 在頁面activated的時候設置爲緩存當前頁面。 3. 頁面跳轉的時候判斷路由的to.name是否包含在已設置的數組中。 4. 跳轉到edit或show頁面,返回後回到緩存頁面,不刷新。由其餘頁面進入則刷新。 5. 若是不設置路由全局守衛,也能夠每一個頁面單獨寫beforeRouteLeave