Vue.js vue-router@4.05对象参数 问题
Vue.js vue-router@4.05对象参数 问题,vue.js,vuejs3,vue-router4,Vue.js,Vuejs3,Vue Router4,router.push({name:{Order],参数:{obj:{}}) 推送obj:{}失败,路由接收到obj:'[object object]' 处境 我有这样的路线设置 { path: '/Order', name: 'Order', component: () => import("../views/Order.vue"), props: route => { return route.params.obj
router.push({name:{Order],参数:{obj:{}})
推送obj:{}
失败,路由接收到obj:'[object object]'
处境
我有这样的路线设置
{
path: '/Order',
name: 'Order',
component: () => import("../views/Order.vue"),
props: route => {
return route.params.obj // '[object Object]'
},
}
这导致在Order.vue
预期结果
基于对象在旧版本中工作
我所测试的
我已经使用jest检查了传递给router.push
的参数,它们看起来应该是:{name:“Order”,params:{obj:{}
有什么想法吗?将对象传递给
params
在Vue路由器中
它在路由器v3中使用了$Router.push
-目标组件收到了对象。但是一旦用户开始使用浏览器导航(后退按钮)或复制/粘贴URL,这个解决方案就被破坏了(您可以尝试它-只需单击按钮,然后使用帧的后退和前进控件)
根据经验-如果要将任何内容传递给目标路由/组件,则必须将此类数据定义为路由定义中的参数,以便将其直接包含在URL中。替代方法是在存储中传递数据、查询参数或使用历史状态
Vue路由器v3也是如此,Vue路由器v4也是如此
注意
只是为了解释替代方案。我所说的“存储”并不仅仅是Vuex。我理解Vuex对于一些小型应用程序来说可能过于致命。我个人更喜欢现有的Vuex。而且您可以非常轻松地创建全局状态解决方案…路由参数是URL中的字符串(即
/Route/:param
)。您认为这将如何序列化{}
to a string?我也这么想,但似乎表明你可以将对象作为参数传递,这是两年前关于一个更老版本的问题时问到的。因为这是可能的,我想知道它是否仍然存在。感谢github问题,我继续构建了一个小型数据信使和beforeRouteEnter中间件,以从信使传递道具。绕过router.push在路由之间发送数据。我可以继续在url@ShaneAbramMendez你能分享这个实现吗?
{
...
props: route => {
return route.params.obj // '{}'
},
}