通过 vue-router 传递多个参数,其中一个在 URL 中使用

VBo*_*bby 3 javascript vue.js vue-router

我正在尝试将数据从一条路线传递到另一条路线。但是,我需要将 ID 和标题传递给子路由,并仅使用 URL 中的标题,而不使用 ID。我将使用 ID 来获取数据。我到处都读过,但我想不出解决我的问题的方法。

例子:

假设我们在名为“图书馆”的路线上,那里有不同的书籍。当点击其中一本书时,我想转到另一条路线,该路线将在 URL 中显示书名,并具有可用于数据获取的 ID。我怎样才能做到这一点?

我已经找到了如何进行动态 URL 匹配,我可以将其用于标题显示,但无法传递 ID:

<router-link :to="{path: '/Book/' + book.title}">

我还发现了如何使用命名路由传递参数,但是如何使用 URL 中的标题呢?

<router-link :to="{name: 'Book', params: {title: book.title}}">

我确信我在这里遗漏了一些东西,但我不完全确定是什么。

And*_*hiu 9

你可以使用props

路由器/index.js:

routes: [
  { path: '/Library/:title', name: 'Book', component: Book, props: true },
  ...
]
Run Code Online (Sandbox Code Playgroud)

导航:

:to="{ name: 'Book', params: { title: book.title }, props: { id: book.id } }"
Run Code Online (Sandbox Code Playgroud)

Book.vue

export default {
  props: {
    id: {
      type: String,
      required: true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

props: true您可以传递默认值,而不是在路由器定义中,即:

..., props: { id: '1' }
Run Code Online (Sandbox Code Playgroud)

厌倦在 url 中使用标题,它可能需要转义。我知道这对 SEO 有好处,但 ids 更安全。

  • 我终于解决了!一切都像你所做的那样,除了在导航中,我没有添加道具,而是将 id 包含在参数中,所以它看起来像这样: ` :to="{ name: 'Book', params: { title: book.标题,id:book.id }}" ` 感谢您的帮助! (9认同)