路由仪表板组件的正确方法是什么?
What is the proper way to route dashboard components?
我正在为我的 Vue 应用构建一个仪表板,我对如何处理仪表板路由有疑问。
我的仪表板容器组件具有以下结构:
<template>
<div>
<side-nav />
<div>
<router-view />
</div>
</div>
</template>
目标是呈现不同的组件,同时保持导航和其他内容静态。
我的路由结构如下:
{
path: "/dashboard",
name: "Dashboard",
component: Dashboard,
children: [
{
path: "/dashboard/home",
component: AccountHome,
alias: "/dashboard"
},
{
path: "/dashboard/settings",
component: Settings
}
]
}
我想知道将默认组件设置为在我的仪表板内呈现的正确方法是什么。现在,当用户验证为 /dashboard
并呈现 AccountHome
组件时,我希望登录页面的 URL 。上述路线使用别名有效,但似乎不是解决问题的正确方法。
如果我没有别名,router-view
中就没有组件,所以我最终只渲染静态仪表板组件。
有没有其他方法可以处理这个问题?还是处理仪表板路由的标准?
通常,您的页眉、页脚和其他固定布局元素会放在布局文件中或直接放在 App.vue 中作为 Vue components。该布局将包含您的动态视图并使用 router-view 插槽来实现此目的。
像这样的事情很典型:
<template>
<TheHeader/>
<ErrorMessage/>
<router-view v-slot="{ Component }">
<transition>
<component :is="Component"></component>
</transition>
</router-view>
<TheFooter />
</template>
您似乎选择了呈现一个空的 Dashboard 组件并希望其第一个 child 显示 Dashboard 内容。这是一个很好的方法,添加一个 DashboardHome 组件并将其像这样连接到路由器中,以便在保持 /dashboard 作为根路由的同时显示它:
children: [
// DashboardHome will be rendered inside Dashboard's <router-view>
{ path: '', component: DashboardHome }
]
我的大部分仪表板视图都没有使用 children,因为我在 URLs 中看不到 /dashboard/* 的必要性,它在语义上不像它那样有趣将用于 /settings/organization/ 或 /user/new 等。这意味着我的仪表板路由位于 router.js 的最外层级别,因此每个项目都是 /dashboard 的兄弟而不是 child.
我确实为 simpler/smaller 内容位使用 child 路由,例如 /signup/success。这里我展示了 children 和 v-if 而不是单独的模板,像这样:
<div class="container" v-if="signupStatus.signedUp && !signupStatus.signingUp">
<router-view></router-view>
</div>
如果您想在 URL 中保留 /dashboard 并使用适当的模板嵌套路线视图,您可以根据需要嵌套任意数量的新 router-view 或 router-view 插槽在您的仪表板路线级别以下(嵌套深度随您所愿)。此处示例:https://jsfiddle.net/yyx990803/L7hscd8h/
我正在为我的 Vue 应用构建一个仪表板,我对如何处理仪表板路由有疑问。
我的仪表板容器组件具有以下结构:
<template>
<div>
<side-nav />
<div>
<router-view />
</div>
</div>
</template>
目标是呈现不同的组件,同时保持导航和其他内容静态。
我的路由结构如下:
{
path: "/dashboard",
name: "Dashboard",
component: Dashboard,
children: [
{
path: "/dashboard/home",
component: AccountHome,
alias: "/dashboard"
},
{
path: "/dashboard/settings",
component: Settings
}
]
}
我想知道将默认组件设置为在我的仪表板内呈现的正确方法是什么。现在,当用户验证为 /dashboard
并呈现 AccountHome
组件时,我希望登录页面的 URL 。上述路线使用别名有效,但似乎不是解决问题的正确方法。
如果我没有别名,router-view
中就没有组件,所以我最终只渲染静态仪表板组件。
有没有其他方法可以处理这个问题?还是处理仪表板路由的标准?
通常,您的页眉、页脚和其他固定布局元素会放在布局文件中或直接放在 App.vue 中作为 Vue components。该布局将包含您的动态视图并使用 router-view 插槽来实现此目的。
像这样的事情很典型:
<template>
<TheHeader/>
<ErrorMessage/>
<router-view v-slot="{ Component }">
<transition>
<component :is="Component"></component>
</transition>
</router-view>
<TheFooter />
</template>
您似乎选择了呈现一个空的 Dashboard 组件并希望其第一个 child 显示 Dashboard 内容。这是一个很好的方法,添加一个 DashboardHome 组件并将其像这样连接到路由器中,以便在保持 /dashboard 作为根路由的同时显示它:
children: [
// DashboardHome will be rendered inside Dashboard's <router-view>
{ path: '', component: DashboardHome }
]
我的大部分仪表板视图都没有使用 children,因为我在 URLs 中看不到 /dashboard/* 的必要性,它在语义上不像它那样有趣将用于 /settings/organization/ 或 /user/new 等。这意味着我的仪表板路由位于 router.js 的最外层级别,因此每个项目都是 /dashboard 的兄弟而不是 child.
我确实为 simpler/smaller 内容位使用 child 路由,例如 /signup/success。这里我展示了 children 和 v-if 而不是单独的模板,像这样:
<div class="container" v-if="signupStatus.signedUp && !signupStatus.signingUp">
<router-view></router-view>
</div>
如果您想在 URL 中保留 /dashboard 并使用适当的模板嵌套路线视图,您可以根据需要嵌套任意数量的新 router-view 或 router-view 插槽在您的仪表板路线级别以下(嵌套深度随您所愿)。此处示例:https://jsfiddle.net/yyx990803/L7hscd8h/