【发布时间】:2021-09-28 10:54:43
【问题描述】:
我有一个带有 Nuxt.js (v 2.15.7) 的单页应用程序,它需要从 URL 中获取两个参数。例如:
domain.com
domain.com/chapter3
domain.com/chapter3/section5
所有这 3 个地址都应该呈现在 pages/index.vue 中找到的同一页面,我只想能够在 $route.params.chapterNo 和 $route.params.sectionNo 更改时读取它,而无需真正重定向到不同的页面。
我通过如下编辑my nuxt.config.js file 部分完成了这项工作:
router: {
extendRoutes(routes, resolve) {
routes.push({
name: 'chapter',
path: '/chapter:chapterNo?',
component: resolve(__dirname, 'pages/index.vue')
});
routes.push({
name: 'section',
path: '/chapter:chapterNo?/section:sectionNo?',
component: resolve(__dirname, 'pages/index.vue')
});
}
},
唯一的问题是,这会破坏 pages/index.vue 的先前版本,并在每次路由到新章节或章节时重新安装它的新版本。 mounted() 在每次路由更改时被调用,但我只需要安装一次页面。随着地址的变化,它将被动画化,但是通过这种设置,整个 DOM 被清除并重新构建,从而消除了动画的可能性。我可以使用什么路由器配置来只获取两个参数而不重新渲染整个页面?
我尝试删除配置文件的 component 属性,但这给了我 page not found 错误。
尝试1:
我尝试在根 <Nuxt> 组件上使用 keep-alive,但这只会缓存每个页面。它仍然会在每次路由更改时重新安装一次。
尝试 2:
我尝试了带有define multiple parameters 选项的router-extras 模块,但每次路由更改时都会重新安装pages/index.vue。这是我的尝试,产生了同样的问题:
<router>
{
path: '/chapter:chapterNo?/mission:missionNo?',
}
</router>
有什么方法可以改变路由获取参数而不重新挂载pages.index.vue?
【问题讨论】:
-
如果你尝试用这个包添加别名怎么办? github.com/nuxt-community/…
-
我看到了解决方案。同时我想知道这是否不能用查询参数而不是路径变量来解决。
-
@kissu 谢谢你的建议。我刚刚尝试使用带有多个参数选项的
router-extras,但它仍然会重新安装pages/index.vue。
标签: vue.js nuxt.js vue-router