vue入门:路由 router

news2025/4/19 14:04:07

文章目录

  • 介绍
  • 安装
  • 配置
    • 路由模式
    • 嵌套路由
    • 路由传参
    • 编程式导航
    • 路由懒加载
  • 底层原理

介绍

vue2 vue router API
vue3 vue router API

Vue Router 是 Vue.js 的官方路由管理器,它允许你通过不同的 URL 显示不同的组件,从而实现单页面应用(SPA)。

Vue Router 是构建单页面应用的核心工具,通过路由管理不同的页面组件,实现页面的切换而无需重新加载整个页面,从而提高用户体验和性能。

路由(Route) :路由是 Vue Router 中的基本单元,它定义了路径与组件之间的映射关系。
例如,当用户访问 /home 路径时,路由会将对应的 Home 组件渲染到页面上。路由可以包含路径参数、查询参数等,用于传递动态数据。

路由表(Routes) :路由表是一个数组,包含了所有路由的定义。
每个路由对象通常包含 path(路径)和 component(组件)两个属性。例如:

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
  { path: '/user/:id', component: User }
];

在这个例子中,Home 组件对应根路径 /About 组件对应 /about 路径,而 /user/:id 是一个带有动态参数的路由,id 是路径参数,可以通过 this.$route.params.id 在组件中获取

导航守卫(Navigation Guards) :导航守卫是 Vue Router 提供的一种机制,用于在路由跳转过程中执行一些逻辑判断或操作。
它可以在路由跳转之前(前置守卫)、跳转之后(后置守卫)或在路由跳转过程中(全局守卫)进行拦截和处理。
例如,可以使用前置守卫 beforeEach 来实现登录验证,如果用户未登录,则跳转到登录页面

const router = new VueRouter({ ... });
router.beforeEach((to, from, next) => {
  if (to.path === '/login') {
    next(); // 如果目标路径是登录页面,直接放行
  } else {
    const isAuthenticated = checkAuth(); // 假设有一个函数用于检查用户是否登录
    if (isAuthenticated) {
      next(); // 如果用户已登录,放行
    } else {
      next('/login'); // 如果用户未登录,跳转到登录页面
    }
  }
});

安装

npm install vue-router

配置

在 Vue 项目中,通常会在一个单独的文件(如 router/index.js)中配置路由。以下是基本配置的步骤:

  • 引入 Vue 和 Vue Router,并使用 Vue.use() 将 Vue Router 安装为 Vue 的插件:
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
  • 定义路由组件:
import Home from '../components/Home.vue';
import About from '../components/About.vue';

# 创建路由表:
const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

# 创建并配置路由实例,然后挂载到 Vue 实例上:
const router = new VueRouter({
  mode: 'history', // 设置路由模式,默认是 hash 模式
  routes // (缩写)相当于 routes: routes
});
export default router;

在 Vue 实例中使用路由:

import Vue from 'vue';
import App from '../App.vue';
import router from './router';
new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

路由模式

hash 模式
这是 Vue Router 的默认模式。在这种模式下,URL 中会包含一个 #,例如 http://example.com/#/home。它的原理是利用浏览器的 hashchange 事件来监听 URL 的变化,并且不会向服务器发送请求。优点是兼容性好,不需要服务器配置支持;缺点是 URL 中的 # 可能会影响美观。

history 模式
这种模式下,URL 是正常的路径形式,例如 http://example.com/home。它利用了 HTML5 的 History API(pushState 和 replaceState)来实现 URL 的变化,而不会重新加载页面。优点是 URL 更美观,符合传统的网页路径形式;缺点是需要服务器配置支持,因为服务器需要正确处理所有路由对应的路径,否则可能会返回 404 错误。

嵌套路由

Vue Router 支持嵌套路由,允许在一个组件内部定义子路由。例如,有一个 User 组件,它包含多个子页面,如 ProfilePosts,可以通过嵌套路由来实现:

const routes = [
  {
    // 当 /user/:id/profile 匹配成功,
    // UserProfile 会被渲染在 User 的 <router-view> 中
    path: '/user/:id',
    component: User,
    children: [
      { path: 'profile', component: Profile },
      { path: 'posts', component: Posts }
    ]
  }
];

在 User 组件中,可以通过 <router-view> 来渲染子路由对应的组件:

<template>
  <div>
    <h1>User</h1>
    <router-view></router-view>
  </div>
</template>

这样,当访问 /user/1/profile 时,Profile 组件会被渲染到 User 组件的 <router-view> 中。

路由视图 <router-view>

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

导航链接 <router-link>

<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>

<!-- 使用命名路由 -->
<router-link :to="{ name: 'About' }">About</router-link>

<!--  路由导航到  /user/123 路径 -->
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>

路由传参

路径参数 :通过在路由路径中定义参数来传递数据,例如 /user/:id。在组件中可以通过 this.$route.params 获取路径参数。例如:

// 路由定义
{ path: '/user/:id', component: User }


// 在 User 组件中获取参数
export default {
  mounted() {
    const userId = this.$route.params.id;
    console.log(userId);
  }
};

查询参数 :通过 URL 的查询字符串来传递参数,例如 /user?id=1。在组件中可以通过 this.$route.query 获取查询参数。例如:

// 在组件中获取查询参数
export default {
  mounted() {
    const userId = this.$route.query.id;
    console.log(userId);
  }
};

编程式导航

Vue Router 提供了编程式导航的方法,允许在代码中直接操作路由跳转,而不仅仅是通过 <router-link>。例如:

// 跳转到指定路径
this.$router.push('/about');
// 带参数的跳转
this.$router.push({ path: '/user', query: { id: 1 } });
// 带路径参数的跳转
this.$router.push({ name: 'user', params: { id: 1 } });
// 替换当前路由,不会添加到历史记录
this.$router.replace('/home');
// 后退到上一个路由
this.$router.go(-1);

路由懒加载

为了提高应用的性能,可以通过路由懒加载来实现按需加载组件。这样可以减少初始加载时间,只在需要时才加载对应的组件代码。例如:

const routes = [
  {
    path: '/',
    component: () => import('../components/Home.vue')
  },
  {
    path: '/about',
    component: () => import('../components/About.vue')
  }
];

底层原理

在这里插入图片描述

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

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

相关文章

JVM详解(曼波脑图版)

(✪ω✪)&#xff89; 好哒&#xff01;曼波会用最可爱的比喻给小白同学讲解JVM&#xff0c;准备好开启奇妙旅程了吗&#xff1f;(๑˃̵ᴗ˂̵)و &#x1f4cc; 思维导图 ━━━━━━━━━━━━━━━━━━━ &#x1f34e; JVM是什么&#xff1f;&#xff08;苹果式比…

进程(Process)和进程管理

李升伟 整理 进程和进程管理是操作系统的核心概念之一&#xff0c;涉及计算机资源的分配、调度和执行控制。以下是详细的解释&#xff1a; 1. 进程的定义 进程&#xff08;Process&#xff09;是正在执行的程序实例&#xff0c;是操作系统进行资源分配和调度的基本单位。它包…

更强的视觉 AI!更智能的多模态助手!Qwen2.5-VL-32B-Instruct-AWQ 来袭

Qwen2.5-VL-32B-Instruct 是阿里巴巴通义千问团队于 2025 年 3 月 24 日开源的多模态大模型&#xff0c;基于 Apache 2.0 协议发布。该模型在 Qwen2.5-VL 系列的基础上&#xff0c;通过强化学习技术优化&#xff0c;以 32B 参数规模实现了多模态能力的突破。 核心特性升级&…

每日算法-250417

每日算法 - 20250417 记录今天的算法学习过程&#xff0c;包含三道 LeetCode 题目。 1005. K 次取反后最大化的数组和 题目 思路 贪心 解题过程 想要获得最大的数组和&#xff0c;我们的目标是尽可能地增大数组元素的总和。一种有效的贪心策略是&#xff1a;每次选择数组中绝…

16.4B参数仅激活2.8B!Kimi-VL-A3B开源:长文本、多模态、低成本的AI全能选手

近日&#xff0c;月之暗面&#xff08;Moonshot AI&#xff09;开源了Kimi-VL系列模型&#xff0c;包含Kimi-VL-A3B-Instruct&#xff08;指令调优版&#xff09;和Kimi-VL-A3B-Thinking&#xff08;推理增强版&#xff09;。这两款模型以总参数16.4B、激活参数仅2.8B的轻量化设…

山东大学软件学院创新项目实训开发日志(17)之中医知识历史问答历史对话查看功能完善

本次完善了历史对话的查看功能&#xff0c;可以让其正常显示标题 后端&#xff1a;在conversationDTO功能构造方法添加title 前端&#xff1a;在历时会话按钮添加标题title即可 前端效果展示&#xff0c;成功(&#xff3e;&#xff0d;&#xff3e;)V&#xff1a;

ZKmall开源商城静态资源管理:Nginx 配置与优化

ZKmall开源商城作为电商平台&#xff0c;其商品图片、前端资源等静态内容的高效管理与分发直接影响用户体验和系统性能。基于Nginx的静态资源管理方案&#xff0c;结合动静分离、缓存优化、安全加固、性能调优四大核心策略&#xff0c;可显著提升平台响应速度与稳定性。以下是具…

Google Gemini 系列AI模型 的详细解析,涵盖其技术特点、版本差异、应用场景及优势

以下是 Google Gemini 系列AI模型 的详细解析&#xff0c;涵盖其技术特点、版本差异、应用场景及优势&#xff1a; 1. Gemini 系列概述 发布背景&#xff1a; Google于2023年推出 Gemini 系列模型&#xff0c;作为其多模态大模型的里程碑&#xff0c;旨在结合文本、图像、音频…

量子通信应用:量子安全物联网(三)协议融合

第一部分:引言与概述 1.1 量子安全物联网的背景与必要性 随着物联网(IoT)设备的爆炸式增长(预计2030年全球连接设备超750亿台),传统安全机制(如RSA、ECC加密)正面临量子计算的颠覆性威胁。量子计算机的Shor算法可在多项式时间内破解非对称加密体系,而Grover算法则对…

鸿蒙API15 “一多开发”适配:解锁黄金三角法则,开启高效开发新旅程

一、引言 在万物互联的时代浪潮中&#xff0c;鸿蒙操作系统以其独特的 “一多开发” 理念&#xff0c;为开发者打开了一扇通往全场景应用开发的新大门。“一多开发”&#xff0c;即一次开发&#xff0c;多端部署 &#xff0c;旨在让开发者通过一套代码工程&#xff0c;就能高效…

驱动-自旋锁

前面原子操作进行了讲解&#xff0c; 并使用原子整形操作对并发与竞争实验进行了改进&#xff0c;但是原子操作只能对整形变量或者位进行保护&#xff0c; 而对于结构体或者其他类型的共享资源&#xff0c; 原子操作就力不从心了&#xff0c; 这时候就轮到自旋锁的出场了。 两个…

10.(vue3.x+vite)div实现tooltip功能(css实现)

1:效果截图 2:代码实现 <template><div><div class="tooltip" style="margin-top: 20%; margin-left: 20%; background-color: blueviolet; color: white;

Linux:进程:进程调度

进程在CPU上运行具有以下特性&#xff1a; 竞争、独⽴、并⾏、并发 竞争性:系统进程数⽬众多&#xff0c;⽽CPU资源很少甚至只有一个&#xff0c;所以进程之间是具有竞争属性的。为 了⾼效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级 独⽴性: 为了避…

Stable Diffusion 图像生成 GUI 应用:图像缩放等五个优化——SD界面学习记录

本篇续前面Stable DiffusionPyqt5实现图像生成和管理界面&#xff0c;链接如下&#xff1a; Stable DiffusionPyqt5&#xff1a; 实现图像生成与管理界面&#xff08;带保存 历史记录 删除功能&#xff09;——我的实验记录&#xff08;结尾附系统效果图&#xff09;-CSDN博客…

职坐标解码互联网行业转型发展新动能

当前&#xff0c;互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示&#xff0c;我国互联网企业营收连续三年保持双位数增长&#xff0c;其中百强企业在人工智能、物联网等领域的投入强度同比提升40%&#xff0c;展现出强劲的技术引领力。与此同时&#xff0c…

【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现

课程目标&#xff1a; 教你从零开始部署运行项目&#xff0c;学习环境搭建、项目导入及部署&#xff0c;含项目源码、文档、数据库、软件等资料 课程简介&#xff1a; 本课程演示的是一款基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现&#xff0c;主要针对计算机相关…

Causal Attention的底层原理

Causal Attention Transformer的Decoder中最显著的结构是Casual Attention。 通过本篇文章&#xff0c;你将学会 Casual Attention的机制原理 Casual Attention在TensorFlow中的实现原理 如何快速地保存并打印TensorFlow中模型已经训练好的参数 如何实现Transformer的Dec…

CyberAgentAILab 开源数字人项目TANGO,heygen的开源版来了~

简介 TANGO 是 CyberAgentAILab 开源的一项前沿研究成果&#xff0c;其初衷在于探索高效生成模型在实际应用场景中的表现。项目诞生于 CyberAgent 在整合创意与人工智能的实践中&#xff0c;旨在为数字内容生成、交互和实时渲染等领域提供一个高性能、模块化、可扩展的解决方案…

ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…

【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理

目录 引言 1 HDFS核心架构回顾 2 HDFS与YARN的集成 3 HDFS与MapReduce的协同 4 HDFS与Hive的集成 4.1 Hive架构与HDFS交互 4.2 Hive数据组织 4.3 Hive查询执行流程 5 HDFS在生态系统中的核心作用 6 性能优化实践 7 总结 引言 在大数据领域&#xff0c;Hadoop生态系统…