其实这个不生效的问题根本也不算一个问题,犯的错和写错单词差不多,但是也是一时上头没发现,所以记录一下,如果遇到同样的问题,也希望可以帮助你早点看到这个哭笑不得的错误,哈哈哈
首先看一下我写的简单 demo
效果很简单,点击切换路由,切换的这个路由是子路由,路由结果如下:
const routes = [
{
path: '/',
name: 'home',
component: () => import('@/components/HomeView.vue'),
children: [
{
path: 'about',
component: () => import('@/views/AboutView.vue')
},
{
path: 'message',
component: () => import('@/views/MessageView.vue')
}
]
}
]
这些我就不做赘述了,都非常简单
app.vue 文件代码如下:
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
export default {}
</script>
<style scoped></style>
看了这个之后,在展示一下一级路由 HomeView,如下:
<template>
<div class="home-container">
<div class="header">
<div class="tabs">
<span
class="tab"
v-for="item in tabList"
:key="item.path">
<router-link :to="item.path">{{ item.name }}</router-link>
</span>
</div>
</div>
<div class="main">
<!-- 展示子路由的路由视图 -->
<router-view></router-view>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tabList: [
{ name: '关于', path: '/about' },
{ name: '留言', path: '/message' }
]
}
}
}
</script>
<style lang="less" scoped>
.home-container {
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
.header {
height: 70px;
display: flex;
align-items: center;
justify-content: center;
border-bottom: 1px solid #666;
.tab {
margin-right: 20px;
font-size: 20px;
}
}
.main {
flex: 1;
width: 100%;
}
}
</style>
其余两个页面和本次问题关系不大,而且都很简单就不展示了
现在我打需求是在切换页面的时候,可以让留言页面输入的内容进行缓存
我们在 app.vue 下是使用 keep-alive,看看效果
<template>
<div>
<!-- MessageVue 是留言组件的 name 属性 -->
<keep-alive :include="['MessageVue']">
<router-view></router-view>
</keep-alive>
</div>
</template>
效果如图:
现在是无法生效的,然后我们放在 HomeView 的路由出口上,如下:
<template>
<div class="home-container">
<div class="header">
<div class="tabs">
<span
class="tab"
v-for="item in tabList"
:key="item.path">
<router-link :to="item.path">{{ item.name }}</router-link>
</span>
</div>
</div>
<div class="main">
<keep-alive :include="['MessageVue']">
<router-view></router-view>
</keep-alive>
</div>
</div>
</template>
现在在看一下效果,如图:
解决还是非常简单的,谨以此文记录我这次马虎的错误