vue-11(命名路由和命名视图)

命名路由和命名视图

命名路由和命名视图提供了组织和导航 Vue.js 应用程序的强大方法,尤其是在它们的复杂性增加时。它们提供了一种语义更合理、可维护的路由方法,使您的代码更易于理解和修改。命名路由允许您按名称引用路由,而不是依赖 URL,而命名视图允许您根据当前路由在页面的不同部分呈现多个组件。本课将详细探讨这些概念,为您提供在 Vue.js 项目中有效使用它们的知识和技能。

命名路由

命名路由提供了一种为应用程序中的每个路由分配唯一名称的方法。这允许您使用路由的名称而不是 URL 导航到路由,从而使您的代码更具可读性和可维护性。如果 URL 结构发生更改,则只需更新路由定义,并且按名称对该路由的所有引用都将自动更新。

定义命名路由

要定义命名路由,只需向路由配置对象添加 name 属性即可。

const routes = [{path: '/users/:id',name: 'user', // This is the named routecomponent: User,},{path: '/about',name: 'about',component: About,},
];

在此示例中,我们定义了两个命名路由:userabout用户路由还包括一个动态段 :id

使用命名路由导航

一旦你定义了一个命名路由,你就可以使用它通过 router.push() 以编程方式导航,或者在你的模板中使用 <router-link>

编程导航:

// Assuming you have access to the router instance (e.g., this.$router)
this.$router.push({ name: 'user', params: { id: 123 } });

在这里,我们将导航到 id 参数设置为 123 的用户路由。

使用 <router-link> 导航:

<router-link :to="{ name: 'user', params: { id: 456 } }">Go to User 456</router-link>
<router-link :to="{ name: 'about' }">About Us</router-link>

<router-link> 组件会根据命名路由及其参数自动生成正确的 URL。

使用命名路由的好处

  • 可读性: 使用名称而不是 URL 可以使您的代码更易于理解。
  • 可维护性: 如果更改 URL,则只需更新路由定义,而无需更新使用该 URL 的每个实例。
  • 灵活性: 命名路由可以更轻松地重构应用程序和更改 URL 结构,而不会破坏现有导航。

示例:电子商务应用程序

考虑一个带有产品页面的电子商务应用程序。您可以使用命名路由,而不是对产品页面 URL 进行硬编码:

const routes = [{path: '/products/:productId',name: 'product',component: ProductDetails,},
];

现在,要导航到特定的产品页面:

<router-link :to="{ name: 'product', params: { productId: product.id } }">{{ product.name }}</router-link>

如果您稍后决定将产品页面 URL 更改为 /item/:p roductId,则只需更新路由定义,使用名为 route 的产品的所有链接都将自动更新。

示例:博客应用程序

在博客应用程序中,您可能有用于单个博客文章的路由。使用命名路由可以简化链接到这些文章的过程:

const routes = [{path: '/posts/:postId',name: 'post',component: BlogPost,},
];

链接到特定的博客文章:

<router-link :to="{ name: 'post', params: { postId: post.id } }">{{ post.title }}</router-link>

练习:在简单应用程序中实现命名路由

  1. 使用 Vue CLI 创建一个新的 Vue.js 项目。
  2. 定义三个组件: 主页产品和``联系人
  3. 创建 router.js 文件并为每个零部件定义路由,分配 homeproductscontact 等名称。
  4. App.vue 文件中,使用带有命名路由的 <router-link> 组件创建指向每个页面的导航链接。
  5. 为产品详细信息 (/products/:id) 添加名称为 product-detail 的动态路由。
  6. Products 组件中,创建一个产品列表,并使用 <router-link>product-detail 命名路由链接到每个产品的详细信息页面。

命名视图

命名视图允许您在单个线路中同时显示多个零部件。这对于创建具有多个部分的布局(如侧边栏、主内容区域和页脚)非常有用。

定义命名视图

要定义命名视图,请在路由配置中使用 components 选项,而不是 component 选项。components 选项是一个对象,其中每个键是视图的名称,每个值是要在该视图中呈现的组件。

const routes = [{path: '/dashboard',components: {default: Dashboard, // The default viewsidebar: Sidebar,notifications: Notifications,},},
];

在此示例中,我们定义了三个命名视图:defaultsidebarnotifications默认视图在 <router-view> 中呈现,没有 name 属性,而其他视图在 <router-view> 组件中呈现,具有相应的 name 属性。

渲染命名视图

要渲染命名视图,您需要在模板中使用多个 <router-view> 组件,每个组件都有一个与要渲染的视图名称匹配的 name 属性。

<template><div><header><h1>Dashboard</h1></header><div class="container"><aside><router-view name="sidebar"></router-view></aside><main><router-view></router-view>  <!-- Default view --></main><aside><router-view name="notifications"></router-view></aside></div><footer><p>&copy; 2023</p></footer></div>
</template>

在此示例中, 边栏组件将呈现在 <router-view name=“sidebar”> 中, 仪表板组件(默认视图)将呈现在 <router-view> 中, 通知组件将呈现在 <router-view name="notifications"> .

使用命名视图的好处

  • 布局灵活性: 命名视图允许您创建同时呈现多个组件的复杂布局。
  • 代码组织: 它们通过将页面的不同部分分离到单独的组件中来帮助您组织代码。
  • 可 重用: 您可以通过将相同的组件分配给不同的命名视图,在不同的布局中重用这些组件。

示例:管理员面板

考虑一个带有侧边栏、主要内容区域和通知部分的管理面板。您可以使用命名视图来构建此布局:

const routes = [{path: '/admin',components: {default: AdminDashboard,sidebar: AdminSidebar,notifications: AdminNotifications,},},
];

模板将如下所示:

<template><div class="admin-layout"><aside class="sidebar"><router-view name="sidebar"></router-view></aside><main class="content"><router-view></router-view></main><aside class="notifications"><router-view name="notifications"></router-view></aside></div>
</template>

示例:具有多个部分的应用程序

假设有一个应用程序,其中包含页眉、主要内容和页脚。命名视图可以帮助构建此结构:

const routes = [{path: '/app',components: {header: AppHeader,default: AppContent,footer: AppFooter,},},
];

模板:

<template><div class="app-layout"><header><router-view name="header"></router-view></header><main class="content"><router-view></router-view></main><footer><router-view name="footer"></router-view></footer></div>
</template>

练习:在 Dashboard 应用程序中实现命名视图

  1. 从上一个练习扩展项目。
  2. 创建 3 个组件:DashboardContentDashboardSidebarDashboardNotifications
  3. /dashboard 创建路由,并使用命名视图在具有侧边栏、主内容区域和通知部分的布局中呈现这些组件。
  4. App.vue 文件中,添加具有适当 name 属性的 <router-view> 组件来渲染命名视图。
  5. 使用 CSS 设置布局样式,以创建具有视觉吸引力的仪表板。

组合命名路由和命名视图

您可以组合命名路由和命名视图,以创建更加灵活和可维护的路由配置。这允许您导航到特定布局,其中多个组件使用路由名称同时呈现。

示例:组合命名路由和命名视图

const routes = [{path: '/admin/users',name: 'admin-users',components: {default: AdminUsers,sidebar: AdminSidebar,notifications: AdminNotifications,},},
];

现在,你可以使用 admin-users 命名 route 导航到此布局:

<router-link :to="{ name: 'admin-users' }">Manage Users</router-link>

此方法提供了一种清晰简洁的方式来导航到具有多个组件的复杂布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软认证考试科目众多?该如何选择?

在云计算、人工智能、数据分析等技术快速发展的今天&#xff0c;微软认证&#xff08;Microsoft Certification&#xff09;已成为IT从业者、开发者、数据分析师提升竞争力的重要凭证。但面对众多考试科目&#xff0c;很多人不知道如何选择。本文将详细介绍微软认证的考试方向、…

视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线

一、背景分析​ 1&#xff09;政策监管刚性需求​&#xff1a;国家食品安全战略及 2024年《关于深化智慧城市发展的指导意见》要求构建智慧餐饮场景&#xff0c;推动数字化监管。多地将“AI明厨亮灶”纳入十四五规划考核&#xff0c;要求餐饮单位操作可视化并具备风险预警能力…

Mysql莫名奇妙重启

收到客户反馈有时接口报504&#xff0c;查看应用日志发现故障期间数据库连接失败 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not receive…

半监督学习:低密度分离假设 (Low-Density Separation Assumption)

半监督学习(SSL)的目标是借助未标记数据辅助训练&#xff0c;以期获得比仅用带标签的监督学习范式更好的效果。但是&#xff0c;SSL的前提是数据分布需满足某些假设。否则&#xff0c;SSL可能无法提升监督学习的效果&#xff0c;甚至会因误导性推断降低预测准确性。 半监督学习…

Python Day44

Task&#xff1a; 1.预训练的概念 2.常见的分类预训练模型 3.图像预训练模型的发展史 4.预训练的策略 5.预训练代码实战&#xff1a;resnet18 1. 预训练的概念 预训练&#xff08;Pre-training&#xff09;是指在大规模数据集上&#xff0c;先训练模型以学习通用的特征表示&am…

vue3 eslint ts 关闭多单词命名检查

无效做法 import { globalIgnores } from eslint/config import {defineConfigWithVueTs,vueTsConfigs, } from vue/eslint-config-typescript import pluginVue from eslint-plugin-vue import skipFormatting from vue/eslint-config-prettier/skip-formatting// To allow m…

贪心,回溯,动态规划

1.贪心算法 ​ 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择&#xff0c;从而希望全局最好或是最优的算法。 特点 局部最优选择不能保证全局最优高效 适用条件 局部最优可以导致全局最优问题的最优解包含子问题的最优解 经典问题 活动选择问题最短路径最…

【Netty4核心原理⑧】【揭开Bootstrap的神秘面纱 - 服务端Bootstrap❶】

文章目录 一、前言二、流程分析1. 创建 EventLoopGroup2. 指定 Channel 类型2.1 Channel 的创建2.2 Channel 的初始化 3. 配置自定义的业务处理器 Handler3.1 ServerBootstrap#childHandler3.2 handler 与 childHandler 的区别 4. 绑定端口服务启动 三、bossGroup 与 workerGro…

为什么需要自动下载浏览器驱动?

为什么需要自动下载浏览器驱动&#xff1f; 血泪场景重现 新人入职第一天&#xff1a; 花3小时配置Chrome/Firefox驱动版本不匹配导致SessionNotCreatedException 浏览器自动更新后&#xff1a; 所有测试脚本突然崩溃手动查找驱动耗时长 终极解决方案&#xff1a;自动下载驱…

NLP常用工具包

✨做一次按NLP项目常见工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug&#xff1f; Pug&#xff08;原名 Jade&#xff09;是一种高效的网页模板引擎&#xff0c;通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签&#xff0c;使用缩进定义结构&#xff0c;…

【Android基础回顾】四:ServiceManager

Android 中的 ServerManager 是 Android 框架中一个用于管理系统服务的核心机制。它是 Binder IPC 的一部分&#xff0c;用于在客户端和服务端之间建立联系&#xff0c;广泛应用于系统服务&#xff08;如 ActivityManager、WindowManager 等&#xff09;的注册与获取。 1 Serv…

【Android基础回顾】一:Binder机制是什么?有什么用?

Android中的Binder机制是Android系统中最核心和最基础的进程间通讯机制。 1 什么是进程间通讯机制(IPC)&#xff1f; 众所周知&#xff0c;Android系统基于Linux开发&#xff0c;Linux系统里面本来就有进程间通讯机制。 1.1 Linux的IPC(Inter-Process Communication)概览 它…

Go语言爬虫系列教程5:HTML解析技术以及第三方库选择

Go语言爬虫系列教程5&#xff1a;HTML解析技术以及第三方库选择 在上一章中&#xff0c;我们使用正则表达式提取网页内容&#xff0c;但这种方法有局限性。对于复杂的HTML结构&#xff0c;我们需要使用专门的HTML解析库。在这一章中&#xff0c;我们将介绍HTML解析技术以及如何…

AtCoder 第408​场初级竞赛 A~E题解

A Timeout 【题目链接】 原题链接:A - Timeout 【考点】 模拟 【题目大意】 长老会在 s 秒后睡去,进过 n 次叫醒,长老最后能否是保持清醒。 【解析】 模拟每一次拍击叫醒的过程,查看本次时间距上次时间是否大于 s。注意:第一次拍击叫醒应和 0 秒相减。 【难度】 …

Unity VR/MR开发-VR设备与适用场景分析

视频讲解链接&#xff1a;【XR马斯维】VR/MR设备与适用场景分析&#xff1f;【UnityVR/MR开发教程--入门】_游戏热门视频

MyBatis 查询功能实现全流程

一、创建maven项目 配置好相应的jdk 二、在数据库建立相应的表格 1.因为Mybatis实际是对sql表的一系列操作&#xff0c;所以我们新建一个数据库 2.在查询界面运行下面指令创建一个user表 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NU…

tcp/udp

tcp/udp协议概述 传输层协议基本概念 传输层协议建立在网络层和会话层之间&#xff0c;为应用层实体提供端到端的通信功能&#xff0c;确保数据包的顺序传送及数据的完整性。它利用网络层提供的服务&#xff0c;并通过传输层地址&#xff08;端口号&#xff09;提供给高层用户…

k8s集群安装坑点汇总

前言 由于使用最新的Rocky9.5,导致kubekey一键安装用不了&#xff0c;退回Rocky8麻烦机器都建好了&#xff0c;决定手动安装k8s&#xff0c;结果手动安装过程中遇到各种坑&#xff0c;这里记录下&#xff1b; k8s安装 k8s具体安装过程可自行搜索&#xff0c;或者deepseek; 也…

深入解析 Dotnet-Boxed.Framework:提升 .NET 开发效率的利器

在现代 .NET 开发中&#xff0c;框架和工具的选择对项目的开发效率和长期维护至关重要。Dotnet-Boxed.Framework 是一个开源框架&#xff0c;旨在简化开发流程&#xff0c;提高生产力。它通过一组实用的工具和自动化功能&#xff0c;帮助开发者快速构建高质量的应用程序。本文将…