深入理解前端路由

目录

  • 前言
  • 1. 什么是路由
  • 2. Vue Router 的基础
    • 2.1 安装 Vue Router
    • 2.2 创建路由器
    • 2.3 在应用中使用 Vue Router
  • 3. 路由切换与编程式导航
    • 3.1 声明式导航
    • 3.2 编程式导航
  • 4. 子路由:结构化的路由管理
    • 4.1 子路由的定义
    • 4.2 子路由的渲染
  • 5. 高级用法:路由守卫与懒加载
    • 5.1 路由守卫
    • 5.2 路由懒加载
  • 结语

前言

在现代前端开发中,单页应用(SPA)以其快速、流畅的用户体验受到开发者的青睐。而路由作为单页应用的重要组成部分,为我们提供了在不同路径下展示不同内容的能力。本文将以Vue.js中的Vue Router为例,详细讲解前端路由的基本概念、实现步骤,以及子路由的实际应用,帮助您全面掌握路由的核心功能与使用技巧。

1. 什么是路由

在前端开发中,路由的本质是“路径与内容的映射关系”。它的主要作用是根据用户访问的不同路径,决定显示哪些页面或组件内容。

从技术角度来看,路由的过程包括以下两个部分:

  1. 路径解析:通过浏览器地址栏或编程方式获取用户访问的路径。
  2. 内容渲染:根据路径的定义规则,加载对应的页面或组件并渲染到页面中。

例如,当用户访问路径 /article/manage 时,路由系统会解析该路径,并根据规则展示文章管理组件的内容。

在这里插入图片描述

2. Vue Router 的基础

Vue Router 是 Vue.js 官方提供的路由管理库,用于实现 SPA 中的页面导航。下面我们将分步骤了解如何使用 Vue Router 搭建一个简单的路由系统。

2.1 安装 Vue Router

要使用 Vue Router,需要在项目中进行安装。确保已经使用 Vue CLI 创建了 Vue 项目后,通过以下命令添加 Vue Router:

npm install vue-router@4  

这里的 @4 表示安装的是 Vue Router 的第4版,与 Vue 3 版本兼容。

2.2 创建路由器

安装完成后,需要在 src/router/index.js 文件中创建路由器实例,并导出供其他文件使用:

import { createRouter, createWebHistory } from 'vue-router';  
import LoginVue from '../views/Login.vue';  
import LayoutVue from '../views/Layout.vue';  
import ArticleManageVue from '../views/ArticleManage.vue';  const routes = [  { path: '/login', component: LoginVue },  {  path: '/',  component: LayoutVue,  redirect: '/article/manage',  children: [  { path: '/article/manage', component: ArticleManageVue }  ]  }  
];  const router = createRouter({  history: createWebHistory(),  routes  
});  export default router;  

以上代码定义了基础的路由规则,并通过 createRouter 创建了路由器实例。

2.3 在应用中使用 Vue Router

在 Vue 项目的入口文件 main.js 中,使用路由器并挂载到 Vue 应用实例中:

import { createApp } from 'vue';  
import App from './App.vue';  
import router from './router';  const app = createApp(App);  
app.use(router);  
app.mount('#app');  

这样,路由器就生效了。接下来,可以通过 router-view 标签展示路由匹配到的组件内容。

<template>  <router-view></router-view>  
</template>  

在这里插入图片描述

3. 路由切换与编程式导航

Vue Router 提供了多种方式实现路由切换,包括声明式导航和编程式导航。

3.1 声明式导航

声明式导航通过 <router-link> 标签实现,适用于需要用户手动点击链接切换页面的场景:

<template>  <router-link to="/login">登录</router-link>  
</template>  

3.2 编程式导航

编程式导航适用于需要通过代码动态切换路由的场景,比如表单提交后跳转页面:

import { useRouter } from 'vue-router';  export default {  setup() {  const router = useRouter();  const goToHome = () => {  router.push('/');  };  return { goToHome };  }  
};  

通过调用 router.push 方法,即可实现路径的切换。

4. 子路由:结构化的路由管理

当项目逐渐复杂时,单一的路由规则难以满足需求。子路由(嵌套路由)通过将路径和组件按层级结构组织,帮助我们更高效地管理路由规则。

4.1 子路由的定义

以下代码展示了一个包含子路由的路由配置:

const routes = [  {  path: '/',  component: LayoutVue,  redirect: '/article/manage',  children: [  { path: '/article/category', component: ArticleCategoryVue },  { path: '/article/manage', component: ArticleManageVue },  { path: '/user/avatar', component: UserAvatarVue },  { path: '/user/info', component: UserInfoVue }  ]  }  
];  

在这里,/article/category/article/manage 等路径都是 / 路径的子路由,最终会嵌套展示在父组件 LayoutVue 中。

4.2 子路由的渲染

在父组件 Layout.vue 中,需要使用 router-view 渲染子路由的内容:

<template>  <div>  <h1>网站布局</h1>  <router-view></router-view>  </div>  
</template>  

当访问 /article/manage 路径时,ArticleManageVue 组件的内容会显示在 LayoutVuerouter-view 标签中。

5. 高级用法:路由守卫与懒加载

5.1 路由守卫

路由守卫用于在路由切换时添加逻辑控制,例如权限验证。

router.beforeEach((to, from, next) => {  if (to.path === '/user/info' && !isAuthenticated()) {  next('/login');  } else {  next();  }  
});  

以上代码表示:如果用户未登录且访问 /user/info 页面,则强制跳转到 /login 页面。

5.2 路由懒加载

为了优化性能,可以使用路由懒加载,在需要时动态加载组件:

const routes = [  {  path: '/login',  component: () => import('../views/Login.vue')  }  
];  

结语

通过本文的学习,我们从路由的基本概念出发,逐步探讨了 Vue Router 的安装、配置、子路由实现以及高级用法。路由作为前端开发的核心工具之一,不仅能够提高开发效率,还能帮助我们更好地组织和管理应用结构。在实际项目中,根据需求灵活应用路由功能,将为您的开发工作带来事半功倍的效果。

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

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

相关文章

【UGUI】Unity 游戏开发:背包系统初始化克隆道具

在游戏开发中&#xff0c;背包系统是一个非常常见的功能模块。它允许玩家收集、管理和使用各种道具。今天&#xff0c;我们将通过一个简单的示例来学习如何在 Unity 中初始化一个背包系统。我们将使用 Unity 2021.3.7 版本&#xff0c;并结合 C# 脚本来实现这一功能。 1. 场景…

grafana+prometheus+windows_exporter实现windows进程资源占用的监控

grafanaprometheuswindows_exporter实现windows进程资源占用的监控TOC 一、 管理端搭建&#xff0c;采用windows版本的grafanaprometheus 管理端安装部署不做本文终端&#xff0c;简单讲解一下&#xff0c;此处采用msi的grafana安装包&#xff0c;和免安装版本的prometheus 1…

ElementUI之给el-table实现搜索功能

1&#xff0c;有一个表格 <el-table:data"tableData"borderstyle"width: 100%"><el-table-columnprop"date"label"日期"width"180"></el-table-column><el-table-columnprop"name"label&quo…

Chrome 浏览器 131 版本开发者工具(DevTools)更新内容

Chrome 浏览器 131 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、使用 Gemini 调试 CSS Chrome DevTools 现在推出了一个新的实验性 AI 辅助面板&#xff0c;可以与 Gemini 聊天并获得帮助来调试 CSS。 在 Elements 面板中&#xff0c;右键点击一个元素并选…

Ubuntu20.04 Rk3588 交叉编译ffmpeg7.0

firefly 公司出的rk3588的设备&#xff0c;其中已经安装了gcc 交叉编译工具&#xff0c;系统版本是Ubuntu20.04。 使用Ubuntu20.04 交叉编译ffmpeg_ubuntu下配置ffmpeg交叉编译器为arm-linux-gnueabihf-gcc-CSDN博客文章浏览阅读541次。ubuntu20.04 交叉编译ffmpeg_ubuntu下配…

蓝桥杯第22场小白入门赛2~5题

这场比赛开打第二题就理解错意思了&#xff0c;还以为只能用3个消除和5个消除其中一种呢&#xff0c;结果就是死活a不过去&#xff0c;第三题根本读不懂题意&#xff0c;这蓝桥杯的题面我只能说出的是一言难尽啊。。第四题写出来一点但是后来知道是错了&#xff0c;不会正解&am…

sagemaker中使用pytorch框架的DLC训练和部署cifar图像分类任务

参考资料 https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/pytorch_cnn_cifar10/pytorch_local_mode_cifar10.ipynbhttps://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html 获取训练数据 # s3://zhaojiew-sa…

golang笔记8-函数

1. 基本函数 package mainimport "fmt"/*什么是函数&#xff1a;完成某一功能的程序指令的集合语法&#xff1a;func 函数名称(形参列表)(返回值类型列表){执行语句。。。返回值列表}注意事项&#xff1a;函数名&#xff1a;函数名首字母大写&#xff1a;可以被本包…

vite+vue3+ts编译vue组件后,编译产物中d.ts文件为空

一、前言 使用vue3vitets实现一个UI组件库&#xff0c;为了生成类型文件便于其他项目引用该组件库。根据推荐使用了vite-plugin-dts插件进行ts文件的生成 二、版本 组件版本vue ^3.5.12 vite ^5.4.10 vite-plugin-dts ^4.3.0 typescript ~5.6.2 三、问题描述 使用vitevi…

向量数据库FAISS之二:基础进阶版

基础 1.评价类型和距离 1.METRIC_L2 Faiss 使用了欧几里得 (L2) 距离的平方&#xff0c;避免了平方根。 这仍然与欧几里德距离一样单调&#xff0c;但如果需要精确距离&#xff0c;则需要结果的额外平方根。 2.METRIC_INNER_PRODUCT 这通常用于推荐系统中的最大内积搜索。…

家庭网络常识:猫与路由器

这张图大家应该不陌生——以前家庭网络的连接方式。 图1 家庭网络连接示意图 来说说猫/光猫&#xff1a; 先看看两者的图片。 图2 猫 图3 光猫 这个东西因为英文叫“modem”&#xff0c;类似中文的“猫”&#xff0c;所以简称“猫”。 猫和光猫的区别就是&#xff0c;一…

华三预赛学习笔记(每日编辑,复习完为止)

知识点分布 路由交换技术基础 计算机网络基本概念 计算机网络基本概念&#xff1a; 很多电脑和设备通过电线或无线信号连在一起&#xff0c;可以互相“说话”和“分享东西” 网络的主要形式和发展历程&#xff1a; 诞生阶段-最早的计算机网络是以单个计算机为中心的联机系统-终…

技术速递|Microsoft.Extensions.VectorData 预览版简介

作者&#xff1a;Luis Quintanilla - 项目经理 排版&#xff1a;Alan Wang 我们很高兴推出 Microsoft.Extensions.VectorData.Abstractions 库&#xff0c;该库现已提供预览版。 正如 Microsoft.Extensions.AI 库为使用 AI 服务提供了一个统一层一样&#xff0c;此包为 .NET 生…

第5章-总体设计 5.3 硬件架构设计

5.3 硬件架构设计 1.哪些类型的产品需要架构设计&#xff1f;2.硬件架构师到底做什么&#xff1f;&#xff08;1&#xff09;理解需求和业务模型的情况。&#xff08;2&#xff09;背板设计&#xff0c;既需要考虑业务数据交换能力&#xff0c;也需要考虑子模块的管理监控能力。…

图像/文字差异类型验证码识别 无需训练

某像差异在个别全家桶验证方便有使用&#xff0c;对于这种验证码类型如下&#xff1a; 首先还是目标检测&#xff0c;直接用 dddd 自带的detection 就足够了。 特征提取 其次经过观察&#xff0c;差异答案与其他三个无非就是颜色&#xff0c;字体&#xff0c;方向&#xff0c…

新华三H3CNE网络工程师认证—生成树协议

新华三H3CNE网络工程师认证本节讲解生成树协议&#xff0c;关于生成树协议&#xff0c;提到生成树协议&#xff0c;这个时候不得不提到另外一个概念叫二层环路。二层环路导致的原因是交换机的转发机制导致的&#xff0c;本博客将分析这个机制导致这个问题的原因。 文章目录 一…

使用ai工具探究论文的工作流(阅读一个EEG的cnn-lstm文献(2021))

文章目录 李沐老师的方法论第一遍&#xff1a;做海选第二遍&#xff1a;对相关论文进行精选第三遍&#xff1a;重点研读 AI是怎么分析一个文章的标题&#xff08;Title&#xff09;和关键词摘要&#xff08;Abstract&#xff09;分析引言&#xff08;Introduction&#xff09;梳…

Scala的Array习题

答案&#xff1a;CBBBB import scala.collection.mutable.ArrayBuffer //1 case class DreamItem(content:String,var isDone:Boolean,deadline:String,var order:Int) object p5 {def main(args: Array[String]): Unit {//2val dreamListArrayBuffer[DreamItem]()//梦想清单/…

深度学习的实践层面

深度学习的实践层面 设计机器学习应用 在训练神经网络时&#xff0c;超参数选择是一个高度迭代的过程。我们通常从一个初步的模型框架开始&#xff0c;进行编码、运行和测试&#xff0c;通过不断调整优化模型。 数据集一般划分为三部分&#xff1a;训练集、验证集和测试集。常…

TPU-MLIR 总览

TPU-MLIR 总览 &#x1f4a1;深度学习编译器可以实现一次性代码开发和重用各种计算能力处理器的目标 ## 项目简介&#xff1a; TPU-MLIR 是 AI 芯片的 TPU 编译器工程。该工程提供了一套完整的工具链, 其可以将不同框架下预训练的神经网络, 转化为可以在算能 TPU 上高效运算的…