如何在 Vue 中嵌套许多 children 的路由?
How to nest routing in Vue with many children?
我有三个主要观点,每个观点都有自己的 mark-up 和独特的内容。计划是这样处理的:
视图 1:用户
列出所有用户,指向每个用户的链接,即视图 2。使用路由器链接,您将转到视图 2。
<router-link v-bind:to="'/user/' + user.id">
视图 2:相册
列出用户的所有相册。 Link按查看带您查看的各相册 3.
我用
从 url 获取 id
data() {
return {
id: this.$route.params.id,
这很好用,然后我使用 id 从 API 中获取数据。
当我想向下嵌套一个新层以查看 3 (photoView) 时,问题就开始了。
在这里我有一个嵌套问题:
如果可能的话,我想使用 url like
"/user/:id/albums/:id"
我尝试将路由设置为:
{ path: "/user/:id/albums/:id", component: PhotoView },
并将view2(相册视图)中的router.link改为:
<router-link v-bind:to="'/user/' + id + '/album/' + album.id">
<p>{{ album.title }}</p>
</router-link>
这不起作用。
然后我尝试将 photoView 的路径作为 child 放到 albumview,这很有效。
{
path: "/user/:id",
component: AlbumView,
///
children: [{ path: "/user/album:id", component: PhotoView }],
},
但现在有问题。我渲染了两个视图,照片视图只是堆叠在相册视图下......因为我在相册视图中有 <router-view></router-view>
所以我尝试将它们放在一个容器中(以及容器中的routerview),像这样:
路由:
{
路径:“/用户/”,
组件:容器,
///
child仁:[
{ 路径: "/user/:id", 组件: AlbumView },
{ 路径: "/user/album:id", 组件: PhotoView },
],
},
}
这个不行,只能显示相册视图。
当我单击每个相册时,它只是按预期设置了 url,但路由不起作用。我做错了什么?
解决此问题的最佳解决方案是什么?
I grab the id in both views like this
data() {
return {
id: this.$route.params.id,
当路由到带有路由参数的组件时,会在 $route.params
对象上为每个匹配的参数创建一个 属性。
所以如果路由定义中有多个同名参数:id
,只有最后一个会存储在$route.params.id
属性中,其他的都会覆盖丢失。
在路由定义中给参数不同的名字:
{
path: "/user/:idUser/albums/:idAlbum",
component: PhotoView
},
在组件中访问这些作为:
this.$route.params.idUser
this.$route.params.idAlbum
我有三个主要观点,每个观点都有自己的 mark-up 和独特的内容。计划是这样处理的:
视图 1:用户
列出所有用户,指向每个用户的链接,即视图 2。使用路由器链接,您将转到视图 2。
<router-link v-bind:to="'/user/' + user.id">
视图 2:相册 列出用户的所有相册。 Link按查看带您查看的各相册 3. 我用
从 url 获取 iddata() {
return {
id: this.$route.params.id,
这很好用,然后我使用 id 从 API 中获取数据。 当我想向下嵌套一个新层以查看 3 (photoView) 时,问题就开始了。 在这里我有一个嵌套问题: 如果可能的话,我想使用 url like
"/user/:id/albums/:id"
我尝试将路由设置为:
{ path: "/user/:id/albums/:id", component: PhotoView },
并将view2(相册视图)中的router.link改为:
<router-link v-bind:to="'/user/' + id + '/album/' + album.id">
<p>{{ album.title }}</p>
</router-link>
这不起作用。 然后我尝试将 photoView 的路径作为 child 放到 albumview,这很有效。
{
path: "/user/:id",
component: AlbumView,
///
children: [{ path: "/user/album:id", component: PhotoView }],
},
但现在有问题。我渲染了两个视图,照片视图只是堆叠在相册视图下......因为我在相册视图中有 <router-view></router-view>
所以我尝试将它们放在一个容器中(以及容器中的routerview),像这样:
路由:
{
路径:“/用户/”,
组件:容器,
///
child仁:[
{ 路径: "/user/:id", 组件: AlbumView },
{ 路径: "/user/album:id", 组件: PhotoView },
],
},
}
这个不行,只能显示相册视图。 当我单击每个相册时,它只是按预期设置了 url,但路由不起作用。我做错了什么? 解决此问题的最佳解决方案是什么?
I grab the id in both views like this
data() {
return {
id: this.$route.params.id,
当路由到带有路由参数的组件时,会在 $route.params
对象上为每个匹配的参数创建一个 属性。
所以如果路由定义中有多个同名参数:id
,只有最后一个会存储在$route.params.id
属性中,其他的都会覆盖丢失。
在路由定义中给参数不同的名字:
{
path: "/user/:idUser/albums/:idAlbum",
component: PhotoView
},
在组件中访问这些作为:
this.$route.params.idUser
this.$route.params.idAlbum