【Vue3】深入理解Vue3路由器的工作原理&to的两种写法

本文详细介绍了Vue3路由器的工作原理,包括路由器实例、选项、路由表、路由视图和导航守卫。重点讲解了history和Hash模式的特点及其适用场景,并提到了`to`在`RouterLink`中的两种写法。

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

Vue3提供了一个强大而灵活的路由器,它能够帮助我们构建单页面应用程序(SPA)并管理页面之间的导航。本文将深入探讨Vue3路由器的工作原理,包括其核心概念、使用方法以及一些高级技巧。

🍋路由器的核心概念

在Vue3中,路由器的核心概念包括路由器实例、路由器选项、路由表、路由视图和导航守卫。

  • 路由器实例:我们可以通过创建一个路由器实例来启动Vue3的路由器。路由器实例包含了路由器的配置选项,例如路由表、路由模式(hash或history)等。

  • 路由器选项:路由器选项是一个包含路由配置的对象。它定义了应用程序的路由规则,包括路由路径和对应的组件。

  • 路由表:路由表是一个映射路由路径和组件的配置对象。它告诉路由器在匹配到特定路径时应该渲染哪个组件。

  • 路由视图:路由视图是一个用来显示匹配到的路由组件的组件。在Vue3中,我们使用组件来渲染匹配到的组件。

  • 导航守卫:导航守卫是一个可以在路由跳转时进行拦截的函数。我们可以使用导航守卫来实现路由的权限控制、页面加载状态管理等功能。

本节主要介绍的就是history和hash模式,首先我们来看看history模型

🍋history模式

在 history 模式下,Vue Router 使用浏览器提供的 History API 来管理路由状态。这种模式下的 URL 更加友好,不再需要 # 符号。
特点

无 # 符号:history 模式的 URL 更加美观,不含有 # 符号,更符合传统 URL 的表现形式。
需要服务器支持:由于 history 模式使用了 History API,因此需要服务器的支持。在生产环境中,需要配置服务器以支持对所有页面的访问都返回同一个 HTML 文件,以便在路由跳转时正确加载应用程序。

使用场景

需要SEO:对于需要被搜索引擎索引的应用,使用 history 模式更为合适,因为搜索引擎可以正确解析这种形式的 URL。


上节我们使用的就是history模式
在这里插入图片描述

🍋Hash模式

在 hash 模式下,URL 中的 # 符号被用作路由地址与其后面的参数(称为哈希)的分隔符。因此,http://example.com/#/foo 和 http://example.com/#/bar 都属于 hash 模式下的 URL。
特点

兼容性良好:hash 模式的 URL 兼容性较好,因为在大部分浏览器中,改变 URL 中的哈希不会重新加载页面。
简单实现:hash 模式不需要服务器端的额外配置,可以直接在前端实现。

使用场景

静态站点:对于静态站点或不需要SEO的应用,hash 模式是一个简单而有效的选择。

如果我们想用Hash模式,和上一节一样我们导入

import {createWebHashHistory} from 'vue-router'

之后我们修改一下

history:createWebHashHistory(),

运行后的界面的地址栏就会有#了

在这里插入图片描述

🍋to的两种写法

这里或许有人忘了to在哪里出现过吧,提醒一下RouterLink,路由跳转的组件

下面是两种to的写法,具体用哪个具体情况具体分析,效果一样

<RouterLink to="/about" active-class="MT">关于</RouterLink>
<RouterLink :to="{path:'/about'}" active-class="MT">关于</RouterLink>

🍋总结

在开发过程中,可以根据实际需求选择合适的模式来使用

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

### Vue 3路由的实现方法 Vue 3 使用 `vue-router` 库来管理应用中的导航和组件加载。以下是关于如何在 Vue 3 项目中配置和使用路由的具体说明。 #### 安装 Vue Router 为了在 Vue 3 项目中使用路由功能,首先需要安装最新版的 `vue-router`: ```bash npm install vue-router@next ``` 此命令会自动下载适用于 Vue 3 的版本[^1]。 --- #### 基本路由配置 创建一个名为 `router.js` 或 `index.js` 的文件用于定义路由规则。以下是一个简单的示例: ```javascript import { createRouter, createWebHistory } from &#39;vue-router&#39;; import Home from &#39;../views/Home.vue&#39;; // 主页组件 import Category from &#39;../views/Category/index.vue&#39;; // 分类页面组件 const routes = [ { path: &#39;/&#39;, name: &#39;Home&#39;, component: Home, }, { path: &#39;/category/:id&#39;, // 动态参数 :id name: &#39;Category&#39;, component: Category, props: true, // 启用 props 将动态参数传递给组件 } ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 上述代码展示了基本的路由设置方式,其中 `/category/:id` 表示带有动态参数的路径[^2][^3]。 --- #### 在主入口文件引入并挂载路由器 编辑项目的主入口文件(通常是 `main.js`),将路由器实例注入到根组件中: ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; const app = createApp(App); app.use(router); // 注册路由 app.mount(&#39;#app&#39;); ``` 通过这种方式,整个应用程序都可以访问路由系统。 --- #### 页面模板与导航链接 在实际开发过程中,通常会在 `.vue` 文件中编写 HTML 结构以及绑定数据逻辑。例如,在某个父级组件中可以这样渲染子路由内容: ```html <template> <div> <h1>这是首页</h1> <!-- 导航 --> <router-link to="/">回到主页</router-link><br /> <router-link :to="{name:&#39;Category&#39;, params:{id:1}}">进入分类页面(id=1)</router-link> <!-- 子路由出口 --> <router-view></router-view> </div> </template> ``` 这里 `<router-link>` 提供了一种声明式的导航方式;而 `<router-view>` 则作为占位符显示当前匹配的视图内容。 --- #### Props 参数传递 如果希望更灵活地向目标组件传入额外的数据,则可以在路由对象里开启 `props` 属性支持。当启用该选项后,所有 URL 上查询字符串或者片段都会被解析成对应的键值对形式发送过去。 比如上面提到过的 `Category` 组件内部可以直接接收这些属性: ```javascript // views/Category/index.vue <script setup> defineProps([&#39;id&#39;]); // 接收来自路由的 id 参数 </script> <template> <p>当前分类 ID:{{ id }}</p> </template> ``` 如此一来便实现了基于路径变化更新展示信息的效果。 ---
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馒头学python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值