Vue Router错误地将参数转换为字符串而不是整数

Fre*_*rik 7 vue.js vue-router

当我使用浏览器字段输入URL时,参数将转换为字符串,而不是整数,例如/user/1return {id: "1"}。但是,当使用时this.$route.push({}),参数正确地转换为integer {id: 1}

这是故意行为吗?如果没有,我该如何解决?

Nic*_*all 11

您必须自己处理任何参数值。在路线对象中定义道具功能。这是一个例子:

{
  path: '/user/:userId',
  component: UserProfile,
  props: (route) => {
    const userId = Number.parseInt(route.params.userId, 10)
    if (Number.isNaN(userId)) {
      return 0
    }
    return { userId }
  }
}
Run Code Online (Sandbox Code Playgroud)

链接到vue路由器文档,这在功能模式下

  • 如果您有很多路线,那么不幸的是,这是重复且过多的。他们应该实现一些语法糖,如“/user/:userId<int>”或类似的东西来支持快速类型定义。 (13认同)
  • `props: ({params}) => ({userId: Number.parseInt(params.userId, 10) || 0})` (6认同)
  • 写自己的fxn。像[此处所示]那样执行此操作。(https://github.com/vuejs/vue-router/blob/38e6ccd7757bfdf333bb32a1e496e4359b8ec00f/examples/route-props/app.js#L7) (2认同)