Vue路由器上的可选参数
Posted
技术标签:
【中文标题】Vue路由器上的可选参数【英文标题】:Optional Parameter on Vue Router 【发布时间】:2019-09-14 03:31:19 【问题描述】:所以我有一个项目页面,当我点击一个项目时,我想转到该项目的项目详细信息页面。所以我正在使用动态路线。我作为参数传递了一个名称(将显示在 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 ">
这就是我在其他页面上所做的以在 Vuex 中获取我的项目 ID
const projectId = this.$route.params.id;
this.project = this.$store.getters.getProject(projectId);
这是我点击路由器时得到的
http://localhost:8080/project/myprojectName
在我的路由器文件中我有这个
path: '/project/:name',
name: 'projectDetail',
component: ProjectDetail,
,
【问题讨论】:
【参考方案1】:我不确定您为什么将project
绑定到router-link
,这不是必须的。
<router-link class="project__icon" :to=" name: 'projectDetail', params: name: project.name.replace(' ', ''), id: project.id ">
您需要将:id
作为参数添加到您的路由中。您可以使用?
将其标记为可选。
path: '/project/:name/:id?',
name: 'projectDetail',
component: ProjectDetail,
另外,如果您设置props: true
,您可以将您的组件与路由器解耦,而不是使用this.$route.params.id
,您的详细组件将接收参数作为道具。
path: '/project/:name/:id?',
name: 'projectDetail',
component: ProjectDetail,
props: true,
编辑:如果您想允许刷新并仍然保留 id,则必须在 url 中包含 id,或者您必须将其存储在 localstorage
或 sessionstorage
之类的地方。
【讨论】:
实际上它可以工作,但我每次点击路由器时都会得到 id。 ``` localhost:8080/project/myprojectName/0 ``` 其实我找到了解决方案,不知道为什么,很简单,我只需要``` this.project.id ``` 还是不知道这是怎么回事因为我正在刷新组件内的页面,但组件本身已经知道该项目。感谢您的帮助以上是关于Vue路由器上的可选参数的主要内容,如果未能解决你的问题,请参考以下文章