vue-router 使用keep-alive 标签没有缓存路由

官方文档是这样说明的
clipboard.png
但我在项目中使用<keep-alive>, 切换路由后返回上一个路由时并没有缓存,而是重新渲染了。

index.html:

<keep-alive>

<router-view></router-view>

</keep-alive>

index.js:

const App = r => require.ensure([], () => r(require('./components/app.vue')), 'app');
const AAA = r => require.ensure([], () => r(require('./components/aaa.vue')), 'aaa');
const BBB = r => require.ensure([], () => r(require('./components/bbb.vue')), 'bbb');

const routes = [

{ path:'/', component:App, meta: {keepAlive: true} },
{ path: '/aaa', name: 'aaa', component: AAA, meta: {keepAlive: true} },
{ path: '/bbb', component: BBB, meta: {keepAlive: true} }, 

]

const router = new VueRouter({

routes // (缩写)相当于 routes: routes

})

app.vue:
<div>
<router-link :to="/aaa">Go to Foo</router-link>
<router-link to="/bbb">Go to Bar</router-link>
</div>

aaa.vue:

<template>

<div>
    <div style="height: 2200px;width: 200px; background: #ccc;"></div>
    <button v-on:click="goBack">返回</button>
</div>

</template>
<script>

export default {
    methods: {
        goBack(){
            this.$router.go(-1)
        }
    }
}

</script>

无法缓存路由,每次都重新加载

阅读 6.8k
1 个回答
1、<keep-alive>确实可以保存路由状态,之前是由于请求的数据改变了,所以给我了不能缓存路由的错觉。我的是移动端项目,数据列表加载后点进去看详情,再返回列表页,无法保存当时浏览列表页的位置;不过网上有其他的说法<keep-alive>是可以保存当前路由的浏览位置,但是在我的项目中没有保存,没有用vue-cli这个脚手架【期待大神来解答:<keep-alive>是否可以缓存当前浏览位置】。   
2、关于保存位置: 由于没有使用路由的history模式,所以用sessionStorage来保存列表页位置,然后在*.vue中跳到指定位置activated(){window.scrollTo(x, y)}

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题