【问题标题】:Invalid prop type from router params, expected Number got String来自路由器参数的无效道具类型,预期数字得到字符串
【发布时间】:2018-12-27 07:42:55
【问题描述】:

我正在尝试从 URL 收集 id 值。

以前我在this 帖子中寻求帮助。

在我的index.js 的路由器文件中,我有以下代码:

{   path: '/word/:id',
    name: 'word',   
    component: Word,
    props: true,
}, 

在我的组件中,我有以下代码:

<script>
    export default {
        props: {
             id: Number,
        },
        created() {
             this.routeChanged();
        },
        watch: {
            'id': 'routeChanged',
        },
        methods: {
            routeChanged () {
                console.log(this.id);
            },
        },
    };
</script>

我遇到以下错误:

[Vue 警告]:无效的道具:道具“id”的类型检查失败。期望的数字,得到字符串。

【问题讨论】:

  • @N.B.请注意,编程不是(仅)关于摆脱错误/警告消息。不想放松输入道具类型和/或将转换外包给消费者/父组件有很多正当理由。

标签: vuejs2 vue-router


【解决方案1】:

这就是使用Function mode 将 Props 传递给路由组件的用例:

您可以创建一个返回道具的函数。这允许您将参数转换为其他类型,将静态值与基于路由的值组合等。

在您的情况下,您可以将一个函数传递给props 选项,而不是使用props: true 指定路由选项:

routes = [{
  path: '/word/:id',
  component: Word,
  props: castRouteParams
}];

function castRouteParams(route) {
  return {
    id: Number(route.params.id),
  };
}

实时示例:https://codesandbox.io/s/8kyyw9w26l(点击“Go to Test/3”链接)

【讨论】:

  • 谢谢@ghybs。我正在尝试使用此值通过 API 获取数据库值。现在我得到了一个像 http://127.0.0.1:8000/api/words/%E0%A6%86%E0%A6%A8-%E0%A6%A8%E0%A6%BF%E0%A6%B8%E0%A6%BE 这样的 URL,但这应该像 http://127.0.0.1:8000/api/words/2。谢谢。
  • 我不明白你的评论,对不起。但这对我来说似乎是一个不同的问题。
  • @ghybs 出于好奇目的:有没有办法一次将其设置为所有路线?稍微检查一下idroute.params 中的存在,以确保可能。
  • 嗨@Ibris,您可能可以在所有路由对象上应用一个函数,以将道具成员重新设计为这种函数模式。如有必要,请随时提出新问题。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2021-05-19
相关资源
最近更新 更多