Vue Router基础

news2024/9/22 11:30:55

 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.coloradmin.cn/o/1946951.html

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

相关文章

【Linux】-----工具篇(yum介绍)

目录 Ⅰ、是什么&#xff1f; Ⅱ、Linux下安装软件的三种方式 ①源代码安装 ②rpm包安装 ③yum安装 Ⅲ、yum相关操作 1.查看软件包 2.安装软件 3.卸载软件 Ⅳ、yum本地配置 Ⅰ、是什么&#xff1f; yum是包管理器&#xff0c;也就像一个软件下载安装管理的客户端&…

vsftpd搭建FTP服务器 - 虚拟用户

命令记录 $ sudo apt install vsftpd db-util $ sudo nano /etc/vsftpd.conf $ sudo nano /etc/vsftpd/vsftpd-virtual-users.txt $ sudo db_load -T -t hash -f /etc/vsftpd/vsftpd-virtual-users.txt /etc/vsftpd/vsftpd-virtual-users.db ls /etc/vsftpd/vsftpd-virtual-us…

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞&#xff0c;这些漏洞可能被恶意攻击者利用&#xff0c;从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

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

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

Cyberchef基础概念之-分叉合并-fork/merge

本文将介绍如何利用cyberchef中的fork和merge操作&#xff0c;通过对数据进行分叉和合并对数据进行分类处理。为读者提供数据处理多种思路&#xff0c;使得读者能够在日常的工作中灵活的应对数据中的不同部分&#xff0c;还原被编码数据的原貌。 fork和merge操作是Cyberchef非…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中&#xff0c;有介绍过前端触发的通知服务。 【odoo】右上角的提示&#xff08;通知服务&#xff09; 此文章则介绍后端触发方法。 内容 直接上代码&#xff1a;但是前提一定是按钮触发&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; def bu…

OZON宠物产品推荐,OZON那些宠物产品卖得好

俄罗斯人在为他们的“毛孩子”&#xff08;通常指宠物&#xff0c;特别是狗和猫&#xff09;选择玩具时&#xff0c;同样展现出对多种类型和风格的偏好。结合当前的市场趋势和Ozon等电商平台的热销数据&#xff0c;以下是几款俄罗斯人最喜欢的宠物玩具及其特点&#xff1a; OZ…

C++ 代码实现局域网即时通信功能 (windows 系统 客户端)

本项目使用C实现具备多个客户端和服务器端即时通信聊天功能软件 一&#xff1a;项目内容 使用C实现一个具备多客户端和一个服务器端即时通信功能的聊天软件。 本项目的目的是 学习在windows平台下&#xff0c;进行C网络开发的基本概念&#xff1a;TCP/IP socket通信&#xff0…

西蒙学习法

西蒙学习法 一根筋&#xff0c;挖死坑&#xff1b;会思考&#xff0c;持续不断的思考&#xff1b;会问问题&#xff0c;有深度的问题&#xff1b;一直想一个问题的解决办法&#xff1b; 资料 《世界十大学习方法》之西蒙学习法

数据结构(5.3_3)——由遍历序列构造二叉树

若只给出一棵二叉树的前/中/后/层 序遍历序列中的一种&#xff0c;不能唯一确定一棵二叉树 构造二叉树 前序 中序遍历序列 例&#xff1a; 前序遍历序列&#xff1a;DAEFBCHGI 中序遍历序列&#xff1a;DAEFBCHGI 后序中序遍历序列 层序中序遍历 总结&#xff1a;

贪心算法(五) ----贪心+单调栈,poj-最佳加油方案

力扣316 ---去除重复字母 题目 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s "bcabc&q…

IDEA的pom.xml显示ignored 的解决办法

问题&#xff1a; idea中创建Maven module时&#xff0c;pom.xml出现ignored。 原因&#xff1a; 相同名称的module在之前被创建删除过&#xff0c;IDEA会误以为新的同名文件是之前删除掉的&#xff0c;将这个新的module的pom.xml文件忽略掉显示ignored. 解决&#xff1a; 在…

【Java有关链表OJ题】-- 单链表的逆置、获取链表的中间节点、获取倒数第k个节点、合并两个有序链表

1. 单链表的逆置 思路&#xff1a;通过头插节点来完成单链表的逆置&#xff0c;定义一个cur指向head的下一个节点&#xff0c;curNext记录cur的next节点&#xff0c; 当链表为空&#xff0c;即头节点head为空时&#xff0c;返回null。当链表只有一个head节点时&#xff0c;返…

【MySQL进阶之路 | 高级篇】数据并发问题与四种隔离级别

1. 事务隔离级别 MySQL是一个客户端/服务器架构的软件&#xff0c;对于同一个服务器来说&#xff0c;可以有若干个客户端与之连接&#xff0c;每个客户端与服务器连接之后&#xff0c;就可以称之为一个会话。每个客户端都可以在自己的会话中向服务器发出请求语句&#xff0c;一…

【电子通识】第一、二、三代半导体都是什么?

半导体指常温下导电性能介于导体与绝缘体之间的材料。半导体在集成电路、消费电子、通信系统、光伏发电、照明应用、大功率电源转换等领域应用。 如二极管就是采用半导体制作的器件。无论从科技或是经济发展的角度来看&#xff0c;半导体的重要性都是非常巨大的。 今日大部分的…

opencv入门(二)

文章目录 一、图像的基础操作1.1 图像ROI1.1.1 图像ROI理论介绍1.1.2 图像ROI的具体实现1.2 通道拆分与合并1.2.1 split():拆分通道1.2.2 merge():合并彩色分量图像1.3 图像的加法运算1.3.1 Numpy加法1.3.1 OpenCV加法1.4 图像融合1.4.1 图像加法1.4.2 图像融合1.4.3 注意点1…

sql server 连接报错error 40

做个简单的记录,造成40 的原因有很多,你的错误并不一定就是我遇到的这种情况. 错误描述: 首先我在使用ssms 工具连接的时候是可以正常连接的,也能对数据库进行操作. 在使用 ef core 连接 Sql Server 时报错: Microsoft.Data.SqlClient.SqlException (0x80131904): A network-r…

VIsual Studio:为同一解决方案下多个项目分别指定不同的编译器

一、引言 如上图&#xff0c;我有一个解决方案【EtchDevice】&#xff0c;他包含两个&#xff08;甚至更多个&#xff09;子项目&#xff0c;分别是【DeviceRT】和【DeviceWin】&#xff0c;见名知意&#xff0c;我需要一个项目编译运行在RTOS上&#xff0c;譬如一个名叫INTime…

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤&#xff01;如何选择电子邮件服务商&#xff1f; Mailspring作为一款功能强大、界面友好的邮件客户端&#xff0c;成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程&#xff0c;帮助您打造个性化的邮件体验。 Mailspring搭…

智能APK动态防护系统:自动重命名与签名,实现安全分发

本智能APK动态防护系统通过集成先进的自动化处理技术&#xff0c;实现了对APK文件的深度定制化与安全性强化。系统核心功能包括自动反编译APK、随机生成包名与签名、代码混淆等&#xff0c;最终回编译生成独一无二的APK安装包。这一过程每5分钟&#xff08;时间间隔可自定义&am…