快速上手Vue Router和组合式API:创建灵活可定制的布局

开发 前端
Vue Router 是在 Vue.js 单页应用程序中创建路由的事实标准。但是,你是否知道,除了使用它将路由映射到页面组件之外,还可以使用它来组合页面布局?这是一个有趣的建议。让我们看看如何实现。

该教程从基础开始,介绍了Vue Router的概念,如何配置路由以及如何使用组合式API。它还介绍了如何在Vue Router中使用组合式API来创建布局。教程还包括如何使用路由钩子函数和路由元信息来控制布局。

Vue Router 是在 Vue.js 单页应用程序中创建路由的事实标准。但是,你是否知道,除了使用它将路由映射到页面组件之外,还可以使用它来组合页面布局?这是一个有趣的建议。让我们看看如何实现。

假设我们正在构建一个博客,在该博客中,某些页面可能在主要内容的两侧都有侧边栏:

图片

其他页面只需要在内容旁边放置一个侧边栏,而且主内容前后的位置可以变化。

图片

而其他页面则根本不需要侧边栏。

图片

我们该如何完成这个任务?选项1是为侧边栏创建组件,并根据需要在每个页面中包含它们。例如, AboutShow.vue 将获得一个类似于以下内容的路由记录:

// router/index.js
{
path: '/about',
component: () => import('../pages/AboutShow.vue')
},

而相应的页面组件可能是这样的:

// *AboutShow.vue
<template>
<div class="flex ...">
<SidebarOne />
<main>....</main>
<SidebarTwo />
</div>
</template>

<script setup>
import SidebarOne from "@/components/SidebarOne"
import SidebarTwo from "@/components/SidebarTwo"
</script>*

无论如何,关于页面始终会与侧边栏相耦合。在大多数情况下,这可能并不是什么大问题。然而,让我们考虑一种替代方法,即在路由器级别而不是页面级别组成布局。

命名视图

为了实现这一点,我们将为路由记录提供 components​ (复数)选项,而不是 component (单数)选项:

{
path: '/about',
components: {
default: () => import('@/pages/AboutShow.vue'),
LeftSidebar: () => import('@/components/SidebarOne.vue'),
RightSidebar: () => import('@/components/SidebarTwo.vue'),
},
},

在这里,我们定义了关于路由应该包括一个默认组件,即关于页面。这就是将显示在RouterView​组件中。但是,它还应该包括一个 LeftSidebar​ 组件,该组件映射到 SidebarOne​ ,以及一个 RightSidebar​ 组件,该组件映射到 SidebarTwo 。

现在,为了让 LeftSidebar​ 和 RightSidebar​ 组件知道在哪里显示,我们必须使用额外的路由器视图,称为命名视图,以及我们的默认路由器视图。我们还可以将路由器视图包装在带有一些 Tailwind​ 类的 div 中,以便美观地布局。

<!-- App.vue -->
<template>
<!--...-->
<div class="sm:flex container p-5 mx-auto content justify-betweenflex-wrap">
<RouterView class="view main-content w-full order-2"></RouterView>
<RouterView name="LeftSidebar" class="view order-1 w-full"></RouterView>
<RouterView name="RightSidebar" class="view order-3 w-full"></RouterView>
</div>
<!--...-->
</template>

请注意,新的路由器视图具有与我们提供给路由记录的组件属性的键相匹配的名称属性( LeftSidebar​ 和 RightSidebar )

最后,这一次页面本身可以完全排除侧边栏,结果是一样的。

// *AboutShow.vue
<template>
<div>
<main>....</main>
</div>
</template>

图片

这可能看起来有点绕,但现在很酷的是,有了这些额外的命名视图,我们可以在任何新的路由记录上灵活地添加一个或两个侧边栏。

侧边栏

图片

{
path: '/posts/:id',
components: {
default: () => import('@/pages/PostShow.vue'),
RightSidebar: () => import('@/components/SidebarTwo.vue'),
},
},

左侧的侧边栏

图片

//router/index.js
{
path: '/posts/:id',
components: {
default: () => import('@/pages/PostShow.vue'),
LeftSidebar: () => import('@/components/SidebarOne.vue'),
},

右侧边栏

图片

//router/index.js
{
path: '/posts/',
components: {
default: () => import('@/pages/PostIndex.vue'),
RightSidebar: () => import('@/components/SidebarOne.vue'),
},

原文:https://vueschool.io/articles/vuejs-tutorials/composing-layouts-with-vue-router/

责任编辑:武晓燕 来源: 大迁世界
相关推荐

2024-01-12 07:22:49

Vue组合式props

2022-06-13 08:39:21

Vue3API

2024-06-20 13:50:53

Vue 3API开发

2022-03-24 15:28:43

Vue开发框架

2020-07-10 11:30:29

组合式架构传统存储存储

2022-03-11 12:31:04

Vue3组件前端

2015-01-28 09:59:00

IBM混合云

2017-11-02 08:44:50

组合式存储架构

2024-06-25 12:20:31

2022-02-22 07:37:26

VuePinia态管理库

2021-12-10 08:13:02

MatplotlibpythonAPI

2022-06-21 12:09:18

Vue差异

2021-12-15 08:23:42

Vue3 插件Vue应用

2021-12-01 08:11:44

Vue3 插件Vue应用

2020-12-01 08:34:31

Vue3组件实践

2010-08-04 10:40:40

2021-12-02 05:50:35

Vue3 插件Vue应用

2023-08-01 07:25:38

Expresso框架API

2024-05-15 09:15:34

Vue环境3D

2020-10-20 09:51:51

Vue 3 的组合
点赞
收藏

51CTO技术栈公众号