「从零开始的 Vue 3 系列:第七章——深入学习核心功能——Router(巨详细)

news/2024/10/16 0:09:50/

前言

本系列将从零开始,系统性地介绍 Vue 3 的常用 API,逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示,帮助大家掌握 Vue 3 的基础与进阶知识,最终具备独立搭建完整 Vue 3 项目的能力。

Vue核心功能之一Router

ue 3 中的 Vue Router 是用于构建单页面应用程序(SPA)的官方路由管理器,它提供了强大而灵活的导航机制,让开发者可以轻松地管理应用内的多页面导航。

安装配置步骤

1.npm安装Router

cd my-vue-app
npm install vue-router@4

2.配置 Vue Router

引入router
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
];const router = createRouter({history: createWebHistory(), // 使用 HTML5 History 模式routes
});
export default router;

3.main.js中挂载

import { createApp } from 'vue';
import App from './App.vue';
import router from './router'; // 导入路由配置const app = createApp(App);app.use(router); // 使用路由器app.mount('#app');

4.在应用中使用路由

<template><div id="app"><nav><ul><li><router-link to="/">Home</router-link></li><li><router-link to="/about">About</router-link></li></ul></nav><router-view></router-view></div>
</template><script>
export default {name: 'App'
}
</script>

内容详解:

1.声明式路由配置

在 Vue Router 中,你可以使用声明式方式定义应用的路由规则。每个路由映射到一个组件,当用户访问某个路径时,Vue Router 会渲染与之关联的组件。

const routes = [{ path: '/', component: Home },{ path: '/about', component: About },
];
2.动态路由

动态路由允许你使用参数(如用户 ID 或文章 ID)来匹配不同的路径。例如,/user/:id 可以匹配 /user/1 或 /user/2 等不同的路径,并通过 $route.params 访问这些参数。
后面的一篇关于权限的文章会详细介绍动态路由的使用

const routes = [{ path: '/user/:id', component: User },
];
3.嵌套路由

嵌套路由(也称为子路由)可以在应用中创建多层嵌套的视图结构。例如,一个主页可以有多个子视图,这些子视图各自拥有自己的路由。
嵌套路由也是我们工作中用到非常多的一个功能

const routes = [{//路由地址path: '/parent',//页面文件位置component: () => import('@/views/jlsbjc/index'),//子路由children: [{ path: 'child',//子路由组件component: Child },],},
];
4.导航守卫

Vue Router 提供了钩子函数(如 beforeEach 和 beforeResolve),可以在路由发生变化之前或之后执行逻辑。这对于权限验证、数据预加载等操作非常有用。
之后权限文章也会详细讲解路由守卫

router.beforeEach((to, from, next) => {//to代表着你要去哪里(表示即将要进入的目标路由对象。)//from代表着你从哪里来(代表当前导航正要离开的路由对象。)//next重定向,如果没有权限就直接跳转到指定的路由页面,一般是登录页面// 判断用户是否有权限访问该路由if (to.meta.requiresAuth && !isAuthenticated()) {//如果没有就重定向到页面首页next('/login');} else {// 继续导航next();}
});
5. 路由懒加载

为了优化性能,Vue Router 支持路由的懒加载功能,即只有在用户访问某个路由时才加载对应的组件。这样可以减少初次加载时的资源体积,提高页面响应速度。

const routes = [{path: '/about',component: () => import('./views/About.vue'),},
];
6. 滚动行为

Vue Router 支持自定义页面滚动行为,你可以指定当用户导航到新页面时页面的滚动位置。这在单页应用中提升了用户体验。

const router = createRouter({history: createWebHistory(),routes,scrollBehavior(to, from, savedPosition) {if (savedPosition) {return savedPosition;} else {return { top: 0 };}},
});
7. 路由模式(history、hash)

在 Vue Router 的 hash 模式和 history 模式中,Vue 提供了一些常用的方法来进行导航操作。无论是 hash 模式还是 history 模式,这些方法的使用方式是相同的,主要的差异体现在路由模式的 URL 表现形式和浏览器交互方式上。

    1. 用于导航到一个新的 URL 地址:router.push()
this.$router.push('/about'); // 使用路径
this.$router.push({ path: '/about' }); // 或者使用对象形式
this.$router.push({ name: 'about' }); // 使用命名路由
this.$router.push({ path: '/about', query: { id: 123 }}); // 带有查询参数
    1. 替换当前的路由,不会向 history 栈中添加新记录。:router.replace()
this.$router.replace('/about');
this.$router.replace({ name: 'about' });
this.$router.replace({ path: '/about', query: { id: 123 }});
    1. 用于在浏览器历史记录中向前或向后导航:router.go()
this.$router.go(1);  // 前进一页
this.$router.go(-1); // 后退一页
  • 4.等价于 router.go(-1),用于返回到上一个路由:router.back()
this.$router.back();
  • 5.用于前进到下一个路由。:router.forward()
this.$router.forward();

在 Vue Router 中可以通过配置路由来选择 history 模式或 hash 模式。默认是 hash 模式,如果想要使用 history 模式,需如下配置:

const router = new VueRouter({mode: 'history', // 使用 history 模式routes: [{ path: '/about', component: About },{ path: '/contact', component: Contact }]
});

总结:

安装与基本配置
使用 npm 安装 Vue Router 4.x,确保与 Vue 3 的兼容性。
配置路由器实例,并将其集成到 Vue 应用中,通过 createRouter 创建路由对象并定义路由规则。
路由功能详解:

声明式路由配置:简单而直观地定义路径与组件的映射关系。
动态路由:通过路径参数实现灵活的路由匹配,适用于用户详情页等需求。
嵌套路由:通过路由嵌套实现复杂的视图结构,支持多层次的界面布局。
导航守卫与懒加载

导航守卫:利用路由钩子函数实现权限控制和数据预加载,为应用提供更好的用户体验。
路由懒加载:按需加载组件优化性能,减少初次加载时间。

滚动行为与路由模式
自定义页面滚动行为,提升用户体验。
了解并配置路由的两种模式:history 和 hash 模式,根据需求选择合适的 URL 表现形式。
导航操作方法
使用 router.push、router.replace 等方法进行编程式导航,灵活控制页面跳转。

ps:以上内容仅为本人对 vue3的个人理解,如有不足之处,欢迎大家指正与交流,共同进步。

http://www.ppmy.cn/news/1539670.html

相关文章

【NTN 卫星通信】卫星通信的专利

1 概述 好久没有看书了&#xff0c;最近买了本讲低轨卫星专利的书&#xff0c;也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术

java对接GPT 快速入门

统一对接GPT服务的Java说明 当前&#xff0c;OpenAI等GPT服务厂商主要提供HTTP接口&#xff0c;这使得大部分Java开发者在接入GPT时缺乏标准化的方法。 为解决这一问题&#xff0c;Spring团队推出了Spring AI &#xff0c;它提供了统一且标准化的接口来对接不同的AI服务提供商…

《OpenCV计算机视觉》—— 使用DNN模块实现图片风格迁移

文章目录 OpenCV中的DNN模块一、功能概述二、支持的模型格式三、基本使用方法四、DNN 模块的特点五、常见应用示例 示例&#xff1a;图片风格迁移 OpenCV中的DNN模块 OpenCV中的DNN&#xff08;Deep Neural Network&#xff09;模块是一个功能强大的工具&#xff0c;它允许开发…

【数学分析笔记】第5章第1节 微分中值定理(2)

5. 微分中值定理及其应用 5.1 微分中值定理 5.1.4 一阶导数与单调性的关系 【定理5.1.5】【一阶导数与单调性的关系】 f ( x ) f(x) f(x)在区间 I \textbf{I} I&#xff08;可以是开区间&#xff0c;也可以闭区间&#xff0c;也可以半开半闭区间&#xff09;定义且可导&…

有关vue路由的学习

导言 由于很久没碰前端了&#xff0c;碰到路由都不太会了。趁着后端对接来记录一下&#xff0c;就当复习。不过由于个人能力有限&#xff0c;这篇会偏向整个过程的实现逻辑&#xff0c;其中有很多具体的方法不会给来&#xff0c;有兴趣的可以去看一下源码~ 目的&#xff1a; …

【鱼类识别】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面+TensorFlow

一、介绍 鱼类识别系统。使用Python作为主要编程语言开发&#xff0c;通过收集常见的30种鱼类&#xff08;‘墨鱼’, ‘多宝鱼’, ‘带鱼’, ‘石斑鱼’, ‘秋刀鱼’, ‘章鱼’, ‘红鱼’, ‘罗非鱼’, ‘胖头鱼’, ‘草鱼’, ‘银鱼’, ‘青鱼’, ‘马头鱼’, ‘鱿鱼’, ‘鲇…

Servlet的HttpServletRequest

HttpServletRequest是Java Servlet规范中定义的一个接口&#xff0c;它表示客户端向服务器发送的请求&#xff0c;并提供了与HTTP请求相关的方法和属性。 getSession方法()&#xff1a;用于获取与当前请求相关联的HttpSession对象。 setAttribute(String name, Object value)…

k8s芜湖

一、k8s简介及部署方法 1、k8s简介 kubernetes的本质是一组服务器集群&#xff0c;它可以在集群的每个节点上运行特定的程序&#xff0c;来对节点中的容器进行管理。目的是实现资源管理的自动化&#xff0c;主要提供了如下的主要功能&#xff1a; 自我修复&#xff1a;一旦某一…