问题:

在使用vue-admin-template进行页面搭建时发现每次路由切换都会调用created方法进行页面刷新。查看文档得知,需要开启缓存,但在实际操作时问题再次出现。

添加页面缓存:

首先是在路由中:(src/router/index.js)
对需要添加缓存的页面对应的路由在meta中添加:keepAlive: true
一个完整的页面路由如下:

{
    path: '/resQuery',
    component: Layout,
    redirect: '/resQuery/resQuery',
    children: [
      {
        path: 'resQuery',
        name: 'res_query',
        // hidden: true,
        component: () => import('@/views/resQuery/resQuery'),
        meta: { title: '综合信息查询', icon: 'el-icon-s-tools', noCache: false, keepAlive: true }
      }
    ]
  },

添加属性之后,进到浏览器对路由进行切换测试,发现不能实现缓存的话:

在AppMain.vue中(src/layout/components/AppMain.vue)添加如下配置:

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

完整的AppMain:

<template>
  <section class="app-main">
    <transition name="fade-transform" mode="out-in">
      <div>
        <keep-alive>
          <router-view v-if="$route.meta.keepAlive"></router-view>
        </keep-alive>
        <router-view v-if="!$route.meta.keepAlive"></router-view>
      </div>
    </transition>
  </section>
</template>

<script>
export default {
  name: 'AppMain',
  computed: {
    key() {
      return this.$route.path
    }
  }
}
</script>

<style scoped>
.app-main {
  /*50 = navbar  */
  min-height: calc(100vh - 50px);
  width: 100%;
  position: relative;
  overflow: hidden;
}
.fixed-header+.app-main {
  padding-top: 50px;
}
</style>

<style lang="scss">
// fix css style bug in open el-dialog
.el-popup-parent--hidden {
  .fixed-header {
    padding-right: 15px;
  }
}
</style>

此时进入浏览器进行测试即可发现缓存成功。

问题再次出现(每次路由切换路由页面都被缓存)

此时就需要用自己的代码逻辑对页面按照自己需求进行页面刷新。
我的解决方式为:
在localStorage中存储一个标记用于标识页面状态,然后再进行页面跳转,跳转到目标页面后将标记get出来,然后进行一下标识判断,判断为true进行页面刷新,并将标识进行反向复制。

具体代码:

getMember(groupNums){
        console.log(groupNums);
        window.localStorage.setItem("fresh_flag",1);
        window.localStorage.setItem("numGrou",groupNums);
        this.$router.push({
          path:'/groupInfo',
          name:'group_info'
        })
      },
activated(){
        var that = this;
      //QQ信息跳转结果
      var ff = window.localStorage.getItem("fresh_flag");
      if (ff == 1) {
        var ng = window.localStorage.getItem("numGrou");
        that.req_data.keywords = ng;
        that.req_data.type = 1;
        that.getGroupData();
        window.localStorage.setItem("fresh_flag",0);
        window.localStorage.setItem("numGrou",'');
        that.req_data.type = '';
      }
 }
GitHub 加速计划 / vu / vue-admin-template
16
5
下载
PanJiaChen/vue-admin-template: 基于 Vue.js 和 Element UI 的后台管理系统模板,支持多语言、主题和布局切换。该项目提供了一个完整的后台管理系统模板,可以方便地实现后台管理系统的快速搭建和定制,同时支持多种数据源和插件扩展。
最近提交(Master分支:4 个月前 )
4c18a3f4 - 3 年前
714ded11 - 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐