Vue Router 上的可选参数

Joa*_*ada 5 routes vue.js vue-router

所以我有一个项目页面,当我点击一个项目时,我想转到该项目的项目详细信息页面。所以我使用动态路由。我将名称(将显示在 URL 上)和 Id(我用来去我的商店并获取项目,此 Id 未显示在 URL 上)作为参数传递。一切正常,问题是当我在项目详细信息页面内加载浏览器时,我只获取名称作为参数,而我无法获取 Id,因此我无法将 Id 与我的 vuex 匹配,因为没有 Id。

这是我在父母上的路由器链接

<router-link class="project__icon" :project="project" :to="{ name: 'projectDetail', params: {name: project.name.replace(' ', ''), id: project.id} }">

Run Code Online (Sandbox Code Playgroud)

这就是我在其他页面上为在 Vuex 中获取我的项目 ID 所做的工作

const projectId = this.$route.params.id; 
    this.project = this.$store.getters.getProject(projectId);
Run Code Online (Sandbox Code Playgroud)

这是我点击路由器时得到的

http://localhost:8080/project/myprojectName
Run Code Online (Sandbox Code Playgroud)

在我的路由器文件中,我有这个

{
 path: '/project/:name',
 name: 'projectDetail',
 component: ProjectDetail,
},
Run Code Online (Sandbox Code Playgroud)

Ste*_* B. 4

我不知道为什么你要绑定projectrouter-link, 应该是没有必要的。

<router-link class="project__icon" :to="{ name: 'projectDetail', params: {name: project.name.replace(' ', ''), id: project.id} }">
Run Code Online (Sandbox Code Playgroud)

您需要将:id其作为参数添加到您的路线中。您可以使用 来将其标记为可选?

{
 path: '/project/:name/:id?',
 name: 'projectDetail',
 component: ProjectDetail,
}
Run Code Online (Sandbox Code Playgroud)

另外,如果您设置,props: true您可以将组件与路由器解耦,并且this.$route.params.id您的详细组件将接收参数作为 props,而不是使用 。

{
 path: '/project/:name/:id?',
 name: 'projectDetail',
 component: ProjectDetail,
 props: true,
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想允许刷新并仍然保留 id,则必须在 url 中包含 id,否则您必须将其存储在类似localstorage或 的位置sessionstorage