当前位置: 首页 > 知识库问答 >
问题:

javascript - vue-router 版本 > v4.1.4 如何优雅传参?

湛光华
2024-01-29

vue-router v4.1.4 更新日志

官方似乎不再支持以下的写法了:

router.push({ name: 'somewhere', params: { oops: { a: { b: { c: 'gets removed'} } } })

这么写会提示: Discarded invalid param(s)...

官方推荐的替代方案:

  1. 将数据放入pinia等存储中
  2. path query
  3. HistoryState
  4. 将其作为新属性传递给to.meta 导航守卫

方案1感觉让代码变得过于复杂了。
方案2对于需要传递复杂的对象。而不是简单的字符串或数字的话似乎无法做到
方案4同1

方案3不太了解, 除了方案3, 请问有什么更优雅的写法吗?

共有2个答案

吴星汉
2024-01-29

我们使用对象作为参数 一般是不考虑参数丢失的情况的
可以自己封装一个NavTo, GetNavParams方法
如果想保留参数 可以存储到IndexedDB持久化

微生俊名
2024-01-29

�� params 传递参数为什么不支持? �� 编程式导航 | Vue Router
不支持的你没有在 router 配置的时候显式声明你的 params 参数啊!

const routes = [{ path: '/test/:oops', name: 'somewhere', component: somewhereComoponent }]

Vue2.x 时期,也就是 vue-router 3.x 版本的时候我们不想在URL上面展示一些传参信息的时候会通过不在路由配置中显式声明 params 参数,然后通过 router.push({ name: 'user', params: { username: 'eduardo' } }) 的方式去跳转。
这样就不会在URL中展示 params 参数。同时会在刷新页面时候丢失 params 参数,也起到一些特殊地业务处理方式。

但是在 vue-router 4.x 版本之后就不是这样了,如果没有显示声明 params 参数,在使用 router.push({ name: 'user', params: { username: 'eduardo' } }) 的方式去跳转地时候, vue-router 会把 params 参数给抛弃,并且在控制台抛出异常提示。

这其实是因为早期我们不规范的使用 params 造成的。如果你不想显式的在路由表中声明,那么也可以使用 query 参数的形式来替代。但是如果你想要传参的同时不要想在URL中显示参数信息,那么可以通过更新文档中提到的这些方式来操作。

 类似资料:
  • 在传递嵌套的对象时,拿到的是字符串 '[object Object]', 而不是原始的对象. 除了使用 oops: (JSON.stringify(oops)) 还有更合适的方案传参吗?

  • 本文向大家介绍Vue系列:通过vue-router如何传递参数示例,包括了Vue系列:通过vue-router如何传递参数示例的使用技巧和注意事项,需要的朋友参考一下 使用vue-router 来实现webapp的页面跳转,有时候需要传递参数,做法如下: 参考文献:http://router.vuejs.org/en/named.html 主要有以下几个步骤: (1) 设置好路由配置 这里有2个关

  • 本文向大家介绍Dubbo如何优雅停机?相关面试题,主要包含被问及Dubbo如何优雅停机?时的应答技巧和注意事项,需要的朋友参考一下 Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。  

  • 人生太短,不能写没人会读的废话,如果你写了废话,没人会去读。所以好一点的文档是最好的。经理不会去理解这些东西,因为不好的文档会给他们错误的安全感以至于他们不敢依赖他们的程序员。如果一些人绝对坚持你真的在写没用的文档,就告诉他们“是的”,然后安静的找一份更好的工作。 没有其他事情比精确估计 把好的文档转为放松文档要求的估计 更为有效率。真相是冷酷而艰难的:文档,就像测试,会花比开发代码多几倍的时间。

  • 本文向大家介绍如何利用Promises编写更优雅的JavaScript代码,包括了如何利用Promises编写更优雅的JavaScript代码的使用技巧和注意事项,需要的朋友参考一下 你可能已经无意中听说过 Promises,很多人都在讨论它,使用它,但你不知道为什么它们如此特别。难道你不能使用回调么?有什么了特别的?在本文中,我们一起来看看 Promises 是什么以及如何使用它们写出更优雅的

  • Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有: 嵌套的路由/视图表 模块化的、基于组件的路由配置 路由参数、查询、通配符 基于 Vue.js 过渡系统的视图过渡效果 细粒度的导航控制 带有自动激活的 CSS class 的链接 HTML5 历史模式或 hash 模式,在 IE9 中自动降级 自定义的滚动条行