vue使用keep-alive缓存组件,vue多级路由keep alive问题

  vue使用keep-alive缓存组件,vue多级路由keep alive问题

  某视频剪辑软件项目保持活跃配合状态管理动态设置路由缓存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  

目录

   需求效果图解决方案1.App.vue文件主页. js文件3.store/modules/common.js文件4.utils/utils.js文件5.store/index.js文件6.router/index.js文件7.routers/Home.vue文件

  

需求

  首页 列表页 详情页(缓存列表页面) 列表页(不重新加载列表页) 首页(清除列表页的缓存)

  

效果图

  

解决方案

  直接使用保持活跃会出现一个问题,当从查询一进入列表页面,这时缓存目录组件,然后返回首页,点击查询2,会发现目录的数据是查询一的,因为这里直接调用了上一次的缓存因此,在返回首页后需清除目录的缓存,下次进入目录将重新初始化。

  利用保持活跃进行路由缓存,保持活动的包括和排除属性允许组件有条件地缓存。

  配合状态管理维护一个缓存数组即可,不多BB,直接上代码

  

1.App.vue文件

  利用包括属性进行选择性缓存

  模板

  div style= height:100%;

  保持活动状态:include= $ store。状态。常见。“cachedroutenames”

  路由器-视图/

  /保持活力

  /div

  /模板

  脚本

  导出默认值{

  名称:"应用程序"

  };

  /脚本

  

2.main.js文件

  配置路由保持活跃状态

  从“Vue”导入Vue

  //从" vue/dist/vue.esm.js "导入某视频剪辑软件

  导入应用程序自./src/app。vue ;

  从导入路由器./src/router/index ;

  //导入./src/assets/style/reset。CSS ;

  导入"灵活库";

  从导入实用程序./utils/utils ;

  从导入存储. store/index ;

  //配置路由保持活跃状态

  utils.setRouterBeforeEach(路由器);

  //运行时模式

  新Vue({

  路由器,

  店,

  render: h=h(App)

  }).$ mount( # app );

  

3.store/modules/common.js文件

  状态管理管理缓存数组,编写添加和删除缓存路由方法

  const UPDATE _ CACHEDROUTENAMES= UPDATE _ CACHEDROUTENAMES ;

  常量状态={

  activatedReloadData: true,//页面激活的时是否需要重新加载

  //缓存的路由列表

  cachedRouteNames: []

  };

  常量突变={

  [UPDATE_CACHEDROUTENAMES](st,{ action,route }) {

  常量方法={

  add: ()={

  st.cachedRouteNames.push(路线);

  },

  删除:()={

  圣卡奇德鲁泰纳斯。拼接(圣cachedroutenames。查找索引(e=e===路线),1);

  }

  };

  方法[操作]();

  }

  };

  导出默认值{

  命名空间:对,

  状态,

  突变

  };

  

4.utils/utils.js文件

  配置路由保持活跃状态

  导入商店自./store/index ;

  const { cachedRouteNames }=store。状态。常见;

  const changeRoutes=(route,type)={

  常量路线名称=路线。组件。默认。姓名;

  if (routeName type===add ?cachedroutenames。包括(路由名):cachedroutenames。包括(路线名称)){

  商店。提交( common/update _ cachedroutenames ,{

  动作:类型,

  路线:routeName

  });

  }

  };

  //定义添加缓存组件名字函数,设置的时组件的名字

  const addRoutes=(route)={

  changeRoutes(route, add );

  };

  //定义删除缓存组件名字函数,设置的是组件的名字

  const deleteRoutes=(route)={

  更改路线(路由,删除);

  };

  //配置路由保持活跃状态

  const setRouterBeforeEach=(路由器)={

  router.beforeEach(收件人,发件人,下一个)={

  //对该组件是否读取缓存进行处理

  to.matched.forEach((item)={

  常量路线=项目。meta。cachedroutenames

  if (item.meta.keepAlive(!路线(路线(!从。名称 路线。包括(来自。姓名)))))){

  添加路由(项目);

  }否则{

  删除路由(项目);

  }

  });

  next();

  });

  //全局混入。在该组件被解析之后,若是属于需要缓存的组件,先将其添加到缓存配置中,进行缓存

  Vue.mixin({

  beforeRouteEnter(收件人,发件人,下一个){

  下一个(()={

  to.matched.forEach((item)={

  if (to.meta.keepAlive) {

  添加路由(项目);

  }

  });

  });

  },

  });

  };

  导出默认值{

  setRouterBeforeEach

  };

  

5.store/index.js文件

  从“Vue”导入Vue

  从" Vuex "导入Vuex

  从导入操作./actions ;

  从导入突变。/突变;

  从导入状态./州;

  从导入吸气剂./getters ;

  从导入应用程序。/模块/应用程序;

  从导入公用./模块/公共;

  vue。使用(Vuex);

  const store=new Vuex .商店({

  模块:{应用程序,常用},

  状态,

  突变,

  行动,

  吸气剂

  });

  导出默认存储;

  

6.router/index.js文件

  保持活动状态:设置缓存cachedRouteNames:设置缓存条件//突出显示的块

  从“Vue”导入Vue

  从" vue路由器"导入武鲁特

  vue。使用(vue路由器);

  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({

  路线:[

  {

  姓名:家,

  路径:"/home ",

  组件:主页

  },

  {

  名称:列表,

  路径:"/list ",

  组件:列表,

  元:{

  保持活动状态:真的,

  //缓存条件:从列表-详细信息则缓存目录

  cachedRouteNames: [Detail]

  }

  },

  {

  名称:详细信息,

  路径:"/详细",

  组件:详细信息

  }

  ]

  });

  导出默认路由器;

  

7.routers/Home.vue文件

  导出默认值{

  姓名:家,

  组件:{

  横梁

  },

  data() {

  返回{

  列表:[

  查询1,

  查询2

  ]

  };

  },

  已创建(){

  //这个。get data();

  //控制台。日志(111111);

  },

  };

  /脚本

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: