如何在不刷新页面的情况下更改Nuxt.js路由器的路由参数?
P粉131455722
P粉131455722 2023-11-05 14:05:53
[Vue.js讨论组]

我有一个使用Nuxt.js(版本2.15.7)的单页应用程序,需要从URL中获取两个参数。例如:

domain.com 
domain.com/chapter3
domain.com/chapter3/section5

这三个地址都应该渲染在pages/index.vue中找到的相同页面,我只是想能够读取$route.params.chapterNo$route.params.sectionNo,而不需要真正重定向到另一个页面。

我通过编辑我的nuxt.config.js文件部分实现了这一点,如下所示:

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属性,但这会导致页面未找到错误。

尝试1:

我尝试在根<Nuxt>组件上使用keep-alive,但这只会缓存每个页面。它仍然在每次路由更改时重新挂载。

尝试2:

我尝试使用router-extras模块,并使用定义多个参数选项,但每次路由更改时也会重新挂载pages/index.vue。这是我的尝试,产生了相同的问题:

<router>
{
    path: '/chapter:chapterNo?/mission:missionNo?',
}
</router>

有没有办法更改路由以获取参数而不重新挂载pages.index.vue

P粉131455722
P粉131455722

全部回复(4)
P粉550823577

要缓存渲染的组件,请在布局中的<Nuxt>组件上使用keep-alive

<Nuxt keep-alive />

演示1

要仅缓存特定页面,请使用keep-alive-props.include和组件名称(即页面的路径):

<Nuxt keep-alive
      :keep-alive-props="{ include: 'pages/index.vue' }"
/>

演示2

P粉627110304

天天开心

https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E7%8E%AF%E7%90%83%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%AE%A2%E6%9C%8D%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91https://jiameng.baidu.com/searchContentList?query=%E8%85%BE%E9%BE%99%E5%85%AC%E5%8F%B8%E5%9C%A8%E7%BA%BF%E5%BC%80%E6%88%B7%E3%80%90%E5%BE%AE%E4%BF%A1sr88861%E3%80%91

P粉518799557

我在默认布局文件中使用<Nuxt keep-alive />查看Vue开发者工具时,注意到Nuxt为每个章节和部分创建了一个具有唯一键的pages/index.vue的新实例:

这给了我一个想法,通过使用<Nuxt nuxt-child-key="doNotReMount"/>来强制分配一个常量键给页面。

现在,每次新路由时键不会更新,pages/index.vue页面只会被挂载一次,所有后续路由都使用同一个页面实例!

P粉627110304

之前,***公司开户{薇 sr88861}(电)132/6234/5696公司的管理团队进行了深入的研讨与细致的规划。首先,明确了开户的目的与需求。是为了日常资金的收付流转更为便捷高效?还是为了拓展融资渠道,为公司的大规模项目筹备资金?亦或是为了更好地进行财务管理与风险防控?经过多番权衡,确定了开户将服务于公司全方位的金融运作需求,包括但不限于贸易往来结算、工资发放、税务缴纳以及潜在的资金投资与借贷等。同时,对市场上众多的金融机构展开了全面的调研。考量的因素涵盖了银行的信誉度、服务质量、手续费标准、金融产品的丰富性以及网点的便捷性等。经过层层筛选与比较,最终锁定了几家在业内口碑良好、实力雄厚且与***公司业务适配度较高的银行作为开户的候选对象。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号