Vue 缓存当前页面keep-alive

需求:

  产品经理在列表页(几千个数据,n个page)点击某一项进去到详情页后,再返回到列表页发现页面回到了第一页,找不到之前的查看的是哪一条了,为了方便咋公司产品经理,返回列表页时需要记住之前的page页

解决思路:

  在列表页点击某一条进入详情页的时候,触发当前页面的keep-alive缓存页面

解决步骤:

1. 设置路由

   需要缓存的路由设置 keepAlive : true, 不需要缓存的路由设置 keepAlive: false

 router index.js

[
  {
    path: '/dm',
    component: Layout,
    redirect: '/dm/basic',
    name: '设备中心',
    meta: {
      title: '设备中心',
      icon: ''
    },
    children: [{
      path: 'basic',
      name: 'Basic',
      component: Basic,
      meta: {
        title: '设备管理',
        keepAlive: true // 需要缓存
      }
    }, {
      path: 'basic/decDetail',
      name: 'DeviceDetail',
      component: DeviceDetail,
      meta: {
        title: '设备详情',
        level: 2,
        hidden: true,
        keepAlive: false // 不需要缓存
      }
    }]
  },
...

2. 列表页

Bacic.vue

activated() {
    //只刷新数据,不改变整体的缓存
    this.getList()
  },
mounted () {
    this.getProductName()
  },
//修改列表页的meta值,false时再次进入页面会重新请求数据。
  beforeRouteLeave(to, from, next) {
    from.meta.keepAlive = false
    next()
  },
...

3.详情页

basicDetail.vue

...
mounted () {
  },
  // 从详情页返回主页时把主页的keepAlive值设置为true(要做个判断,判断是不是返回到主页的)
  beforeRouteLeave (to, from, next) {
    if (to.name === 'Basic') {
      to.meta.keepAlive = true
    } else {
      to.meta.keepAlive = false
    }
    next()
  },
...

4. 这样既可以保证keepAlive缓存了页面,也可以保证再次进入缓存时刷新数据 

activated() { //激活keep-alive缓存 

  this.getList()  // 只刷新数据, 不改变整体的缓存

},

deactivated () { //清除keep-alive的缓存
// this.$destroy(true)
},

  

在此页面缓存就完成啦,欢迎大家学习交流,本人qq 1542934395

 

  

posted @ 2019-05-14 18:50  front-gl  阅读(2801)  评论(0编辑  收藏  举报