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

news2025/6/4 0:30:00

命名路由和命名视图

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

命名路由

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

定义命名路由

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

const routes = [
  {
    path: '/users/:id',
    name: 'user', // This is the named route
    component: 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 view
      sidebar: 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.coloradmin.cn/o/2395328.html

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

相关文章

Python打卡训练营Day42

DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业&#xff1a;理解下今天的代码即可 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as tr…

基于微信小程序的scratch学习系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“

欢迎来到一整颗红豆的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由一整颗红豆原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创…

SCSAI平台面向对象建模技术的设计与实现

一、核心设计思想 SCSAI平台的核心目标是通过元建模&#xff08;Meta-Modeling&#xff09;技术实现面向对象建模的零编码化。其核心思想为&#xff1a; 自反性设计&#xff1a;定义ObjectClassInfo (OCI)为元类&#xff08;Meta-Class&#xff09;&#xff0c;所有对象类均为…

pikachu通关教程-CSRF

CSRF(get) 用bp进行抓包 选择action value值的修改 点击test in browser copy然后放在bp代理的浏览器上&#xff0c;会出现一个提交按钮&#xff0c;这时候点击之后信息就被修改了。 CSRF(post) 请求的方式不同&#xff0c;其他都是一样 CSRF Token 存在cookie 首先要先下载一…

智能体觉醒:AI开始自己“动手”了-自主进化开启任务革命时代

1. 智能体&#xff1a;AI从“工具”到“伙伴”的关键跃迁 1.1 什么是智能体&#xff1f; 智能体&#xff08;Agent&#xff09;是AI的“进化版”——它不再局限于生成文字或图像&#xff0c;而是能像人类一样“规划任务”“调用工具”甚至“协同合作”。例如&#xff0c;一个…

【C++指南】C++ list容器完全解读(二):list模拟实现,底层架构揭秘

. &#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 文章目录 引言一、链表节点设计&#xff1a;双向链表的基石1.1 节点类的实现 二、list框架与核心成员函…

[神经网络]使用olivettiface数据集进行训练并优化,观察对比loss结果

结合归一化和正则化来优化网络模型结构&#xff0c;观察对比loss结果 搭建的神经网络&#xff0c;使用olivettiface数据集进行训练&#xff0c;结合归一化和正则化来优化网络模型结构&#xff0c;观察对比loss结果 from sklearn.datasets import fetch_olivetti_faces #倒入数…

华院计算出席信创论坛,分享AI教育创新实践并与燧原科技共同推出教育一体机

5月21日&#xff0c;信创论坛于上海漕河泾会议中心举办。本次论坛以“聚力融合&#xff0c;繁荣生态”为主题&#xff0c;话题聚焦工业制造、交通运输、金融、教育、医疗等领域。华院计算技术&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称“华院计算”&#x…

华为OD机试真题——会议接待 /代表团坐车(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《会议…

LabVIEW Val (Sgnl) 属性

在 LabVIEW 事件驱动架构中&#xff0c;Val (Sgnl) 属性&#xff08;Value (Signaling)&#xff09;是实现编程触发与用户交互行为一致性的关键技术。与普通 Value 属性不同&#xff0c;Val (Sgnl) 在修改控件值的同时强制生成值改变事件&#xff0c;确保程序逻辑与 UI 交互保持…

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

目录 一、STM32G4 电机外设篇&#xff08;三&#xff09; TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇&#xff08;三&…

DAY 35 超大力王爱学Python

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#xff0c;对比下效果。…

【数据结构】图的存储(十字链表)

弧节点 tailvex数据域&#xff1a;存储弧尾一端顶点在顺序表中的位置下标&#xff1b;headvex 数据域&#xff1a;存储弧头一端顶点在顺序表中的位置下标&#xff1b;hlink 指针域&#xff1a;指向下一个以当前顶点作为弧头的弧&#xff1b;tlink 指针域&#xff1a;指向下一个…

Redis最佳实践——秒杀系统设计详解

基于Redis的高并发秒杀系统设计&#xff08;十万级QPS&#xff09; 一、秒杀系统核心挑战 瞬时流量洪峰&#xff1a;100万 QPS请求冲击库存超卖风险&#xff1a;精准扣减防止超卖系统高可用性&#xff1a;99.99%服务可用性要求数据强一致性&#xff1a;库存/订单/支付状态同步…

STM32软件spi和硬件spi

核心观点 本文主要介绍了SPI通信的两种实现方式&#xff1a;软件SPI和硬件SPI。详细阐述了SPI通信协议的基本概念、硬件电路连接方式、移位示意图、时序基本单元以及四种工作模式。同时&#xff0c;对W25Q64模块进行了详细介绍&#xff0c;包括其硬件电路、框图以及操作注意事…

深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)

目录 树的表示 二叉树的概念及结构&#xff08;重点学习&#xff09; 概念 &#xff1a; 特点&#xff1a; 树与非树 特殊的二叉树 二叉树的性质(重点) 二叉树的存储结构 堆的概念及结构 建堆方式&#xff1a; 向下调整算法 向上调整算法 建堆第一步初始化 建…

【Linux】shell的条件判断

目录 一.使用逻辑运算符判定命令执行结果 二.条件判断方法 三.判断表达式 3.1文件判断表达式 3.2字符串测试表达式 3.3整数测试表达式 3.4逻辑操作符 一.使用逻辑运算符判定命令执行结果 && 在命令执行后如果没有任何报错时会执行符号后面的动作|| 在命令执行后…

第九天:java注解

注解 1 什么是注解&#xff08;Annotation&#xff09; public class Test01 extends Object{//Override重写的注解Overridepublic String toString() {return "Test01{}";} }2 内置注解 2.1 Override Override重写的注解 Override public String toString() {ret…

十一、【核心功能篇】测试用例管理:设计用例新增编辑界面

【核心功能篇】测试用例管理&#xff1a;设计用例新增&编辑界面 前言准备工作第一步&#xff1a;创建测试用例相关的 API 服务 (src/api/testcase.ts)第二步&#xff1a;创建测试用例编辑页面组件 (src/views/testcase/TestCaseEditView.vue)第三步&#xff1a;配置测试用例…