前言

        在现代化的前端开发中,路由管理是构建单页应用(SPA)的核心功能之一。Vue.js 作为主流的前端框架之一,提供了强大的官方路由库Vue Router,帮助开发者高效管理页面跳转、动态加载、权限控制等关键需求。

        无论是构建企业级后台系统,还是开发高性能的 Web 应用,灵活运用 Vue Router 都能显著提升用户体验和开发效率。本文将深入解析 Vue Router 的核心概念、最佳实践以及高级技巧,帮助开发者掌握路由管理的精髓,打造更流畅、可维护的前端应用。

步骤

1.安装

npm i vue-router@4

        使用该命名安装Vue Router

2.创建文件配置路由实例

        在src文件夹目录下创建router文件夹,在该文件夹中创建index.js,在其配置路由

// 1.导入 createRouter 和 createWebHistory 
import { createRouter, createWebHistory } from 'vue-router'// 2.定义路由
const routes = [{path: '/', // 重定向redirect: '/home'},{path: '/home',component: () => import("../components/home.vue")},{path: '/about',component: () => import("../components/about.vue")}
]// 3.创建路由实例
const router = createRouter({history: createWebHistory(), // 历史模式routes
})// 4.导出路由实例
export default router

        除了历史模式以外还有哈希模式,它们的区别如下:

哈希模式(Hash Mode)

        哈希模式利用URL中的#符号来模拟路由。例如,http://example.com/#/about。浏览器不会将#号后面的内容发送到服务器,因此路由变化不会触发页面刷新。

  • 无需服务器配置即可直接使用,适合静态部署。
  • 兼容性较好,支持老旧浏览器。
  • URL 中带有 #,美观性稍差。

历史模式(History Mode):

        历史模式利用HTML5的history.pushState API实现无刷新路由切换,例如,http://example.com/about。URL更简洁,但需要服务器支持。

  • 需要服务器配置,确保所有路径返回 index.html,避免 404 错误。
  • URL更美观,无#符号
  • 兼容性稍差,不支持IE9及以下版本。

选择建议

  • 需要快速部署或静态托管时,选择哈希模式。
  • 追求美观且能配置服务器时,选择历史模式。

3.全局引用

        将配置好的路由实例引入到main.js中,代码如下:

import router from './router'const app = createApp(App)app.use(router)

 4.配置路由视图和导航

        在App.vue或根组件中,添加<router-view>作为路由组件的渲染出口,并使用<router-link>实现导航跳转,示例代码如下:

<template><div class="app"><!-- 导航链接 --><router-link to="/home">home</router-link><router-link to="/about">about</router-link><!-- 路由组件渲染位置 --><router-view></router-view></div> 
</template>

5.动态路由与参数传递

        通过冒号 : 定义动态路由参数,例如用户详情页面:

{path:'/user/:id',component: () => import("../components/User.vue")}

        在需要进行跳转时通过router.push进行跳转:

<script setup>
import { ref } from 'vue';
import router from './router';const id = ref(22)
function handleUserPage() {router.push(`/user/${id.value}`)
}
</script>

        在组件中通过useRoute获取参数:

<script setup>
import { useRoute } from 'vue-router';const route = useRoute();
console.log(route.params.id);
</script>

6.路由守卫配置

        比如说我们进入一些页面时需要先登录,为防止在用户没有登录的情况下通过url进入首页,因此就需要去配置全局前置守卫beforeEach

    {path: '/user/:id',name: 'user',component: () => import("../components/User.vue")}// 配置路由守卫
router.beforeEach((to, from, next) => {if (to.name === 'user') {  // 通过name匹配const id = to.params.id;if (id === '123') {next();} else {next('/home');}} else {next();}
})

        就比如说这个例子,当我们需要进入user组件时,需要去判断它的id是不是为123,如果是则放行,不是则跳转到home组件。

        但在实际项目中,这里一般是对登录功能进行操作的,当用户登录时我们会将token保存起来,这里就去判断是否有token,如果有则放行进入首页,没有则无法进入首页。

7.路由元信息

        为路由添加自定义数据:

    {path: '/home',component: () => import("../components/home.vue"),meta:{requiresAuth:true, title:'首页'}},

        通过导航守卫修改页面标题:

router.afterEach((to, from) => {document.title = to.meta.title || '默认标题';
})

结语:

        感谢阅读,期待这些见解能为你的学习或工作带来启发。若有更多疑问或需求,欢迎进一步交流与讨论。

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

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

相关文章

Sentinel热点参数限流完整示例实现

Sentinel热点参数限流完整示例实现 1. 添加Maven依赖 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正则表达式深度解析:从LeetCode 3136题说起

正则表达式深度解析&#xff1a;从LeetCode 3136题说起 引言 正则表达式&#xff08;Regular Expression&#xff0c;简称RegEx&#xff09;是一种强大的字符串匹配工具&#xff0c;在字符串处理、数据验证、文本搜索等场景中有着广泛的应用。本文将以LeetCode 3136题"有效…

映美打印机-URL页面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印机编号private $deviceIds &qu…

机器学习算法 ——XGBoost 的介绍和使用

前言&#xff1a; 最近在工作中遇到一个结构化数据回归预测的问题&#xff0c;用到了很多回归算法&#xff08;如多元线性回归等&#xff09;都没有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也冲三个特征参数人为的增加来几个&#xff0c;训练出来的效果还是很…

Linux操作系统之信号:保存与处理信号

目录 前言&#xff1a; 前文回顾与补充&#xff1a; 信号的保存 PCB里的信号保存 sigset_t 信号集操作函数 信号的处理 信号捕捉的流程&#xff1a;​编辑 操作系统的运行原理 硬件中断 时钟中断 死循环 软中断 总结&#xff1a; 前言&#xff1a; 在上一篇文…

Spring Boot 设置滚动日志logback

Spring Boot 的 logback 框架 Spring Boot 默认内置了 Logback 作为日志实现框架&#xff0c;只需要在resources文件夹下添加一个logback-spring.xml&#xff0c;springboot会按照你的设置自动开启logback日志功能。 配置 logback-spring.xml 实现每天产生一个日志文件&#xf…

如何定义一个只能在堆上或栈上生成对象的类

在C中&#xff0c;可以通过特定的技术手段来控制对象只能在堆(heap)或栈(stack)上创建。只能在堆上创建对象的类要实现这一点&#xff0c;我们需要阻止用户直接实例化对象&#xff0c;而只能通过new操作符创建。class HeapOnly { public:static HeapOnly* create() {return new…

1.1 前端-vue3项目的创建

构建工具先搭好vue3框架 vue2的vue-cli脚手架基于webpack构建工具创建vue的框架. 而在vue3&#xff0c;可以通过vite构建工具创建vue3项目&#xff0c;性能更优。 两者创建方式的区别&#xff1a;cmd命令基于的构建工具vue2/vue3vue create 项目名称&#xff08;或 vue ui图形化…

PHP password_get_info() 函数

password_get_info() 函数用于返回指定散列&#xff08;hash&#xff09;的相关信息。 PHP 版本要求: PHP 5 > 5.5.0, PHP 7 语法 array password_get_info ( string $hash ) 参数说明&#xff1a; $hash: 一个由 password_hash() 创建的散列值。 返回值 返回三个元素…

mac上的app如何自动分类

使用文件夹进行手动分类在Finder中创建文件夹&#xff0c;将同类应用拖入同一文件夹。右键点击Dock上的应用图标&#xff0c;选择「选项」→「在Finder中显示」&#xff0c;可快速定位应用安装位置。利用Launchpad自动分组打开Launchpad&#xff08;触控板四指捏合或按F4键&…

LLM面试题目 3

LLM面试题目 3 什么是自注意力机制(Self-Attention)?为什么它在LLM中很重要?如何评估LLM的性能?LLM面临的挑战有哪些?Transformer和RNN的区别是什么?LLM如何处理多轮对话? 题目讲解 什么是自注意力机制(Self-Attention)?为什么它在LLM中很重要? 自注意力机制是一种…

linux上的软挂载操作方法

针对linux上的软挂载 可以查看linux已经挂载和存储的磁盘分区 df -hfdisk 命令是检索相同信息的另一种方法&#xff0c;可以看到所有的磁盘分区 sudo fdisk -l 要将磁盘分区 /dev/sda1 挂载到 /home/visionx/EXD1 目录 步骤 1&#xff1a;准备工作 1.创建挂载目录&#xff08;如…

SecretFlow 隐语 (2) --- 隐语架构概览

在前边两篇文章中&#xff0c;介绍了数据要素和可信流通相关的内容&#xff0c;以及基于p2p模式的安装方法 SecretFlow 隐语 (1) --- 快速入门 关于在Linux上部署 SecretFlow --- P2P部署模式 由于安装过程中出现意外报错&#xff0c;现已提交issue等待官方技术人员查阅&#x…

PHP语言基础知识(超详细)第二节

二十七. 数组的遍历 1)通过函数进行遍历:(例:demo07) (此方式不能完全遍历数组,需要借助其他功能辅助)(不推荐,了解即可) key():返回数组中当前指针所在位置的键。 current():返回数组中当前指针所在位置的值。 例如:demo07: <?php/*key():返回数组中…

网络--OSPF实验

目录 OSPF实验报告 一、实验拓扑 二、实验要求 三、实验思路 1.IP地址划分 2. OSPF 部署 3. 其它配置 4. 验证测试 四、实验步骤 1.IP 地址配置 2.OSPF 部署 3.其它配置 4.验证测试 OSPF实验报告 一、实验拓扑 二、实验要求 1、R1-R3为区域0&#xff0c;R3-R4为…

Go语言第一个程序--hello world!

文章目录一、Go 语言程序安装二、运行程序三、go mod tidy 命令四、遇到的问题五、VS Code 调试 go 程序的相关配置说明一、Go 语言程序安装 Go语言下载链接&#xff1a;https://studygolang.com/dl 双击打开下一步下一步即可。 验证安装&#xff1a;go version 二、运行程序 创…

【MCU控制 初级手札】1.1 电阻

作者&#xff1a;电控工程手札 本博文内容著作权归作者所有&#xff0c;转载请务必保留本文链接 目录1. 定义2. 电导3. 电阻率4. 电导率5. 伏安特性6. 开路与短路7. 功率8. 应用元件特性&#xff08;端子特性&#xff09;&#xff1a;元件的两个端子的电路物理量之间的代数函数…

JS中async/await功能介绍和使用演示

JS 中 async/await 功能介绍与使用演示 一、功能介绍基本概念 async&#xff1a;用于声明异步函数&#xff0c;返回一个 Promise 对象。即使函数内没有显式返回 Promise&#xff0c;也会隐式将返回值封装为 Promise.resolve()。await&#xff1a;仅能在 async 函数内部使用&…

系统调用入口机制:多架构对比理解(以 ARM64 为主)

&#x1f4d6; 推荐阅读&#xff1a;《Yocto项目实战教程:高效定制嵌入式Linux系统》 &#x1f3a5; 更多学习视频请关注 B 站&#xff1a;嵌入式Jerry 系统调用入口机制&#xff1a;多架构对比理解&#xff08;以 ARM64 为主&#xff09; 本篇内容聚焦于系统调用的入口实现机…

java MultipartFile初始化

在Java中&#xff0c;MultipartFile 是Spring框架中用于处理文件上传的接口。​开发者通常不会直接初始化MultipartFile对象&#xff0c;而是通过Spring MVC的控制器方法参数接收上传的文件。如果需要在测试或模拟场景中创建其实例&#xff0c;可以使用Spring的MockMultipartFi…