Vue Router基础

 Router 的作用是在单页应用(SPA)中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时,URL会随之更新,但页面不需要从服务器重新加载。

1 Router 基础

RouterView

RouterView 用于渲染当前URL路径对应的路由组件。可以放在任何地方。

RouterLink

使得Router能在不重新加载页面的情况下改变URL,处理URL的生成、编码。可以使用router.push()函数来代替。

表 Router的基础组件

Router的使用步骤:

  1. 通过调用createRouter() 函数创建Router实例。参数为一个包含路由数组、history等信息的配置项。
  2. 将路由器实例注册为插件,通过调用app.use()来完成。

Router插件的职责包括:

  1. 全局注册RouterView 和 RouterLink组件。
  2. 添加全局$router和$route属性。
  3. 启用useRouter()和useRoute()组合式函数。
  4. 触发路由器解析初始路由。
<!-- App.vue -->
<template>
<h1>Hello App!</h1>
<router-view />
</template><!-- router/index.ts -->
import HomePage from "@/views/HomePage.vue";
import {createRouter, createWebHashHistory} from "vue-router";const routes = [{ path: '/', component: HomePage }
]const router = createRouter({history: createWebHashHistory(),routes,
})
export default router<!-- main.ts -->
import { createApp } from 'vue'
import App from './App.vue'
import router from "@/router";const app = createApp(App)
app.use(router)
app.mount('#app')

1.1 动态路由匹配

1.在配置路由列表时,可以配置路径参数,“:参数名”的形式。这些参数及值会映射到$route.params 上的相应字段。

匹配模式

匹配路径

rout.params

/user/:username

/user/hmf

{ username: ‘hmf’ }

/user/:username/other/:info

/user/hmf/other/hello

{ username: ‘hmf’, other: ‘hello’ }

  2.可以监听路由参数。

wathc(()=> route.params,(newVal){// 省略代码,其中route = userRoute()
})

  3.在参数中自定义正则表达式。

  a)在参数后面的括号里定义该参数匹配的正则表达式。

匹配路径

/user/:id(\\d+)

/user/:id

/user/hello

不匹配

匹配

/user/124

匹配

匹配,但优先级低于有正则表达式的参数。

   b) 可重复的参数。如果路径参数值是一个数组,可以用*及+这两个符号将参数标记为可重复:

例如,/user/:ids(\\d+)*,匹配路径/user/123/33/23,route.params 的值为{ids: [123,33,23]}

1.1.1 sensitive 和 strict路由配置

默认情况下,所有路由是不区分大小写的,并且能匹配带有或不带有尾部斜线的路由(例如,匹配模式为/about,非严格模式下,它可以匹配/about/这个路径)。

可以在创建路由器实例时配置sensitive 和 stric。

1.2 路由配置

一些应用程序的UI由多层嵌套的组件组成。在这种情况下,URL的片段通常对应于特定的嵌套组件结构。

实现方式:在组件中包含自己嵌套的<router-view>。例如在User组件的模版内添加一个<router-view>。

<!-- User.vue -->
<template><div class="user"><h2>User {{ $route.params.id }}</h2><router-view /></div>
</template>

对应的路由配置为:

const routes = [{path: '/user/:id',component: User,children: [{path: 'profile',component: UserProfile,},{path: 'posts',component: UserPosts,},],},
]

图 嵌套组件及对应匹配的路径

路由配置时,可以给子路由命名(须唯一值),例如:

{path: '/usr', name: 'user', component: UserHome},在路径导航时,不仅可以通过URL来匹配组件,还可以通过子路由命名。

route.push(‘/usr’) 等效于 route.push({name: ‘user’})

1.2.1 重定向和别名

{ path: '/home', redirect: '/' }, 从/home 重定向到 /

{ path: '/home', redirect: { name: 'homepage' },从/home 重定向到名为“homepage”的路由。

别名意味着URL不会改变,但是会匹配到特定路径。

{ path: '/', component: Homepage, alias: '/home' },当路径为/及/home时都能访问到Homepage这个组件,且URL不变。

1.2.2 路由组件传参

在组件中使用$route 或useRoute()来获取路径参数,这将使得与路由耦合度更紧密,限制了组件的灵活性,因为它只能用于特定的URL。

可以通过props配置来解除这种行为。在配置路由时,props属性设置为true。

{ path: '/user/:id', component: User, props: true }<!-- User.vue -->
<script setup>
defineProps({id: String
})
</script><template><div>User {{ id }}</div>
</template>

还可以创建一个返回props的函数,将参数转换为其他类型。

{path: '/search',component: SearchUser,props: route => ({ query: route.query.q })}

1.2.3 命名视图

当需要在同级展示多个视图时,可使用命名视图。

<!-- App.vue --><template><router-view class="view left-sidebar" name="LeftSidebar" /><router-view class="view main-content" /><router-view class="view right-sidebar" name="RightSidebar" />
</template>const router = createRouter({history: createWebHashHistory(),routes: [{path: '/',components: {default: Home,LeftSidebar,RightSidebar,},},],
})

图 命名视图

1.2.4 历史记录模式

Hash模式

createWebHashHistory(),它在内部传递的实际URL之前使用了一个哈希字符(#),这使得#后面的URL不会被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理,即可正常访问,但它在SEO中有不好的影响。

例如 http://localhost:8080/#/usr

Memory模式

createMemoryHistory(),不会假定自己处于浏览器环境,因此不会与URL交互也不会自动触发初始导航,不会有历史记录。

HTML5模式

createWebHistory(),需要在服务器上做配置。

例如 http://localhost:8080/usr,如果没适当配置,会得到一个404错误。

表 Vue Router的三种历史模式

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

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

相关文章

Linux--Socket编程预备

目录 1. 理解源 IP 地址和目的 IP 地址 2.端口号 2.1端口号(port)是传输层协议的内容 2.2端口号范围划分 2.3理解 "端口号" 和 "进程 ID" 2.4理解 socket 3.传输层的典型代表 3.1认识 TCP 协议 3.2认识 UDP 协议 4. 网络字节序 5. socket 编程接…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码&#xff1a; 上报模块Makefile代码&#xff1a; STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中&#xff0c;流量录制与回放是一个非常重要的环节&#xff0c;它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater&#xff0c;以及如何利用它来提高软件测试的效率和质量。 …

《Cross-Modal Dynamic Transfer Learning for Multimodal Emotion Recognition》

Multi-modal系列论文研读目录 文章目录 Multi-modal系列论文研读目录1.ABSTRACT2.INDEX TERMS3.INTRODUCTION4.RELATED WORKSA. MULTIMODAL EMOTION RECOGNITION 多模态情感识别1) CONVENTIONAL FUSION METHODS 常规融合方法2) TRANSFORMER-BASED FUSION METHODS 基于变压器的融…

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一&#xff0c;既能在客户端程序中使用&#xff0c;也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目&#xff0c;在Nuget包管理器中搜索并安装Quartz包&#xff0c;如下所…

IDEA在编译的时候报Error: java: 找不到符号符号: 变量 log lombok失效问题

错误描述 idea因为lombok的报错: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy8Lombok supports: sun/apple javac 1.6, ECJ 原因&#xff1a;这是由于Lombok的版本过低的…

若依 ruoyi poi Excel合并行的导入

本文仅针对文字相关的合并做了处理 &#xff0c;图片合并及保存需要另做处理&#xff01;&#xff01; 目标&#xff1a;Excel合并行内容的导入 结果&#xff1a; 1. ExcelUtil.java 类&#xff0c;新增方法&#xff1a;判断是否是合并行 /*** 新增 合并行相关代码&#xff1a;…

matlab 绘制参数方程

matlab 绘制参数方程 绘制参数方程绘制结果 绘制参数方程 clc; clear; close all;axis_length 100;% 定义参数t的范围 t 0:0.01:100;% 计算x和y的值 x t.^2 1; y 4*t - t.^2;% 绘制函数图像 plot(x, y); xlabel(x); ylabel(y); title(Plot of the curve xt^21, y4t-t^2…

Uprecise软件的基本功能

UPrecise 是和芯星通独立开发的评估软件&#xff0c; 旨在帮助用户便捷地对公司产品进行可视化操作。 用户可通过该软件以串口或端口的方式与接收机进行交互并直观地查看其状态信息&#xff0c;连接后 UPrecise 将自动识别接收机的波特率和类型&#xff0c;动态显示该类型接收机…

Python3网络爬虫开发实战(2)爬虫基础库

文章目录 一、urllib1. urlparse 实现 URL 的识别和分段2. urlunparse 用于构造 URL3. urljoin 用于两个链接的拼接4. urlencode 将 params 字典序列化为 params 字符串5. parse_qs 和 parse_qsl 用于将 params 字符串反序列化为 params 字典或列表6. quote 和 unquote 对 URL的…

FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章分享FastAPI&#xff08;七十二&#xff09;实战开发《在线课程学习系统》接口开发-- 留言列表开发&#xff0c;这次我们分享如何回复留言 按…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

Linux:传输层(1) -- UDP协议

1. 端口号 同一台主机的不同端口号(Port)标记了主机上不同的进程&#xff0c;如下图所示&#xff1a; 在 TCP/IP 协议中 , 用 " 源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信 ( 可…

QT开发(QT的基本概述和环境的安装)

QT的概述 一.QT的介绍背景1.1 什么是QT1.2QT的发展史1.3 Qt支持的平台1.4QT版本1.5QT的优点1.6QT的应用场景 二.搭建QT开发环境2.1 QT的开发工具的下载2.2 QT环境变量配置 三.QT的三种基类四.QT Hello World程序4.1使用按钮实现4.1.1 代码方式实现4.1.2 可视化操作实现 一.QT的…

GO内存分配详解

文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

2024.7.24 作业

1.二叉树的创建、遍历自己实现一遍 bitree.h #ifndef BITREE_H #define BITREE_H#include <myhead.h>typedef char datatype;typedef struct Node {datatype data;struct Node *left_child;struct Node *right_child; }Node,*BiTreePtr;//创建二叉树 BiTreePtr tree_cr…

MinerU、Magic-PDF、Magic-Doc

文章目录 一、关于 MinerU二、Magic-PDF1、简介2、项目全景3、流程图4、子模块仓库 三、Magic-PDF 上手指南1、配置要求2、安装配置1. 安装Magic-PDF2. 下载模型权重文件3. 拷贝配置文件并进行配置4. 使用CUDA或MPS加速推理CUDAMPS 3、使用说明1) 通过命令行使用直接使用更多用…

带您详细了解安全漏洞的产生和防护

什么是漏洞&#xff1f; 漏洞是 IT、网络、云、Web 或移动应用程序系统中的弱点或缺陷&#xff0c;可能使其容易受到成功的外部攻击。攻击者经常试图寻找网络安全中的各种类型的漏洞来组合和利用系统。 一些最常见的漏洞&#xff1a; 1.SQL注入 注入诸如 SQL 查询之类的小代…

机器学习周报第四周(7.15-7.21)

文章目录 摘要Abstract1.批次&#xff08;Batch&#xff09;和动量&#xff08;momentum&#xff09;1.1 批次&#xff08;Batch&#xff09;1.2 Momentum 2.自动调整学习速率&#xff08;Learning rate&#xff09;2.1 Adagrad 算法2.2 RMSProp2.3 Adam2.4 学习率调度 3.朴素贝…