<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首頁 → 列表頁→ 詳情頁(快取列表頁面 ) → 列表頁(不重新載入列表頁)→ 首頁(清除列表頁的快取)
直接使用keepAlive會出現一個問題,當從查詢1進入列表頁面,這時快取list元件,然後返回首頁,點選查詢2,會發現list的資料是查詢1的,因為這裡直接呼叫了上一次的快取因此,在返回首頁後需清除list的快取,下次進入list將重新初始化。
利用keepAlive進行路由快取,keepAlive的include 和 exclude 屬性允許元件有條件地快取。
配合vuex維護一個快取陣列即可,不多BB,直接上程式碼
利用include屬性進行選擇性快取
<template> <div style="height: 100%;"> <keep-alive :include="$store.state.common.cachedRouteNames"> <router-view /> </keep-alive> </div> </template>
<script> export default { name: 'App' }; </script>
設定路由keepAlive狀態
import Vue from 'vue'; // import Vue from 'vue/dist/vue.esm.js' import App from '../src/App.vue'; import router from '../src/router/index'; // import "../src/assets/style/reset.css"; import 'lib-flexible'; import utils from './utils/utils'; import store from './store/index'; // 設定路由keepAlive狀態 utils.setRouterBeforeEach(router); // runtime模式 new Vue({ router, store, render: h => h(App) }).$mount('#app');
vuex管理快取陣列,編寫新增和刪除快取路由方法
const UPDATE_CACHEDROUTENAMES = 'update_cachedroutenames'; const state = { activatedReloadData: true, // 頁面activated時是否需要重新載入 // 快取的路由列表 cachedRouteNames: [] }; const mutations = { [UPDATE_CACHEDROUTENAMES](st, { action, route }) { const methods = { add: () => { st.cachedRouteNames.push(route); }, delete: () => { st.cachedRouteNames.splice(st.cachedRouteNames.findIndex(e => e === route), 1); } }; methods[action](); } }; export default { namespaced: true, state, mutations };
設定路由keepAlive狀態
import store from '../store/index'; const { cachedRouteNames } = store.state.common; const changeRoutes = (route, type) => { const routeName = route.components.default.name; if (routeName && type === 'add' ? !cachedRouteNames.includes(routeName) : cachedRouteNames.includes(routeName)) { store.commit('common/update_cachedroutenames', { action: type, route: routeName }); } }; // 定義新增快取元件name函數,設定的時元件的name const addRoutes = (route) => { changeRoutes(route, 'add'); }; // 定義刪除快取元件name函數,設定的是元件的name const deleteRoutes = (route) => { changeRoutes(route, 'delete'); }; // 設定路由keepAlive狀態 const setRouterBeforeEach = (router) => { router.beforeEach((to, from, next) => { // 對該元件是否讀取快取進行處理 to.matched.forEach((item) => { const routes = item.meta.cachedRouteNames; if (item.meta.keepAlive && (!routes || (routes && (!from.name || routes.includes(from.name))))) { addRoutes(item); } else { deleteRoutes(item); } }); next(); }); // 全域性混入。在該元件被解析之後,若是屬於需要快取的元件,先將其新增到快取設定中,進行快取 Vue.mixin({ beforeRouteEnter(to, from, next) { next(() => { to.matched.forEach((item) => { if (to.meta.keepAlive) { addRoutes(item); } }); }); }, }); }; export default { setRouterBeforeEach };
import Vue from 'vue'; import Vuex from 'vuex'; import actions from './actions'; import mutations from './mutations'; import state from './state'; import getters from './getters'; import app from './modules/app'; import common from './modules/common'; Vue.use(Vuex); const store = new Vuex.Store({ modules: { app, common }, state, mutations, actions, getters }); export default store;
keepAlive
:設定快取cachedRouteNames
:設定快取條件// An highlighted block import Vue from 'vue'; import VueRouter from 'vue-router'; Vue.use(VueRouter); const Home = resolve => require(['../routers/Home.vue'], resolve); const List = resolve => require(['../routers/list.vue'], resolve); const Detail = resolve => require(['../routers/detail.vue'], resolve); const router = new VueRouter({ routes: [ { name: 'Home', path: '/home', component: Home }, { name: 'List', path: '/list', component: List, meta: { keepAlive: true, // 快取條件:從List --> Detail 則快取List cachedRouteNames: ['Detail'] } }, { name: 'Detail', path: '/detail', component: Detail } ] }); export default router;
export default { name: 'Home', components: { HeaderBar }, data() { return { list: [ '查詢1', '查詢2' ] }; }, created() { // this.getData(); // console.log(111111); }, }; </script>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45