Vue3:路由

news2024/12/26 20:58:56

1. 路由简介

在Vue3中,路由是一个核心概念,特别是在构建单页面应用程序(SPA)时。以下是Vue3中路由的基本概念:

1. **路由(Route)**:在Vue3中,路由是指根据特定的规则将用户请求从源地址(URL)映射到目标组件(或页面)的过程。通过定义路由规则,我们可以将不同的URL映射到相应的组件,实现页面的切换效果。
2. **路由器(Router)**:路由器是负责管理路由的组件或模块。它定义了路由的规则、路径和对应的处理函数或组件。你可以将路由器视为一个中央控制器,负责管理所有的路由。在Vue3项目中,路由器是由路径和对应的组件构成的。我们通过切换不同的路径来展示不同的组件效果。
3. **前端路由**:在Vue3中,前端路由主要用于单页面应用程序(SPA)。在这种应用中,所有的页面都在同一个HTML文件中加载,通过JavaScript动态地切换显示不同的内容。前端路由的实现方式主要是通过监听URL的变化(如hash或history模式),然后根据这些变化来渲染相应的组件。
4. **嵌套路由**:Vue Router支持嵌套路由,这意味着你可以在父路由下定义子路由,实现复杂的页面结构。例如,你可以在一个用户页面的路由下定义用户详情、用户设置等子路由。
5. **路由守卫**:Vue Router提供了路由守卫(beforeEach、beforeResolve、afterEach等),这些守卫可以在路由切换前后执行相应的逻辑,例如权限验证、路由拦截等。

总的来说,Vue3中的路由是一个强大的工具,它可以帮助我们构建出结构清晰、易于维护的单页面应用程序。通过合理地定义和使用路由,我们可以实现页面之间的流畅切换,提升用户体验。

2. HelloWorld 

入门案列,实现在同一个页面中使某个部分进行组件切换

 

 组件准备

Add组件 

<script setup>
</script>

<template>
    <div>
        <h1>Add</h1>
        <router-link to="list">list页</router-link>
    </div>
</template>

<style scoped>

</style>

 Home组件

<script setup>
</script>

<template>
    <div>
        <h1>Home</h1>
    </div>
</template>

<style scoped>

</style>

 Inert组件 

<script setup>
</script>

<template>
    <div>
        <h1>Home</h1>
    </div>
</template>

<style scoped>

</style>

 List组件

<script setup>
</script>

<template>
    <div>
        <h1>List</h1>
    </div>
</template>

<style scoped>

</style>

 App组件

<script setup>
</script>

<template>
  <div>
    APP顶部
    <hr>
    <router-link to="home">home页</router-link> <br>
    <router-link to="list">list页</router-link> <br>
    <router-link to="add">add页</router-link> <br>
    <router-link to="inert">inert页</router-link> <hr>

    默认展示位置:<router-view></router-view>
    <hr>
    APP底部 <br>
    <hr>
    Home视图展示:<router-view name="HomeView"></router-view> <hr>
    List视图展示:<router-view name="ListView"></router-view> <hr>
    Inert视图展示:<router-view name="InertView"></router-view> <hr>
    Add视图展示:<router-view name="AddView"></router-view> <hr>
  </div>
</template>

<style scoped>

</style>

 routers配置

//导入创建路由对象的函数
import {createRouter, createWebHistory} from 'vue-router'

//导入.vue组件
import Home from '../components/Home.vue'
import Add from '../components/Add.vue'
import Inert from '../components/Inert.vue'
import List from '../components/List.vue'

//通过函数创建路由对象
const router = createRouter({
    //history属性用于记录路由的历史(固定写法,用函数创建个history对象即可)
    history:createWebHistory(),
    //用于定义不同路径和多个组件的对应关系
    routes:[
        {
            path:'/home',
            components:{
                //没有指定名称的router-view组件上默认显示该路径内容
                default:Home,
                //指定的router-view组件上显示该路径的内容
                HomeView:Home
            }
        },
        {
            path:'/add',
            components:{
                AddView:Add
            }
        },
        {
            path:'/inert',
            components:{
                InertView:Inert
            }
        }, 
        {
            path:'/list',
            components:{
                ListView:List
            }
        },
        {
            path:"/",
            component:Home
        },
        //路由重定向
        {
            path:"/show",
            redirect:"/list"
        }
    ]
})

//对外暴露
export default router

 main.js引入路由配置文件

import { createApp } from 'vue'

import App from './App.vue'

//导入router模块
import router from './routers/router.js'

const app = createApp(App)

//绑定路由对象
app.use(router)
app.mount('#app')

 3. 编程式路由(useRouter)

普通路由:

 <router-link to="/home">Home</router-link> 该路由路径由to定义,此时只能跳转到home页

编程式路由:

* 通过useRouter,动态决定向那个组件切换的路由
* 在 Vue 3 和 Vue Router 4 中,你可以使用 `useRouter` 来实现动态路由(编程式路由)
* 这里的 `useRouter` 方法返回的是一个 router 对象,你可以用它来做如导航到新页面、返回上一页面等操作。 

案例需求: 通过普通按钮配合事件绑定实现路由页面跳转,不直接使用router-link标签 

<script setup>
//导入修改路由路径的函数
import {useRouter} from 'vue-router'
import {ref} from 'vue'

//创建动态路由对象
const router = useRouter()

//创建接收文本框信息的变量
let myPath = ref("")
function myPage() {
  //通过动态路由对象修改路径
  router.push(myPath.value)
}

</script>

<template>
  <div>
    <!--声明式路由-->
    <router-link to="/home">Home</router-link> <br>
    <router-link to="/add">Add</router-link> <br>
    <router-link to="/list">List</router-link> <br>
    <router-link to="/update">Update</router-link> <br>

    <!--编程式路由-->
    <button @click="myPage()">GO</button>
    <input type="text" v-model="myPath"> <hr>

    <hr>
    <router-view></router-view>
  </div>
</template>

<style scoped>

</style>

 4. 路由传参(useRoute)

路径参数

在url中使用动态字段实现传递参数称为

如:/home/id/language 此时id和language两个字段的内容可以动态变化的,这两个字段值就是传递的参数

键值对参数

类似于get请求中的url,参数是键值对形式的

如:/home?id=value&language=java

<script setup>

import {useRouter} from 'vue-router'

//获取路由对象
const router = useRouter()

function showDetail(id, language) {
    //路径传参
    //router.push(`/showDetail/${id}/${language}`)
    router.push({path:`/showDetail/${id}/${language}`})
}

function showDetail2(id, language) {
    router.push(`/showDetail2?id=${id}&language=${language}`)
}

</script>

<template>
    <div>
        <router-link to="/showDetail/1/java">声明式路由路径传参</router-link> <br>
        <button @click="showDetail(0, 'C++')">编程式路由路径传参</button> <hr>

        <router-link to="/showDetail2?id=3&language=python">声明式路由键值对传参</router-link> <br>
        <router-link v-bind:to="{path:'showDetail2', query:{id:4, language:'GO'}}">声明式路由键值对传参</router-link>
        <button @click="showDetail2(5, 'PHP')">编程式路由键值对传参</button>
        <hr>
        <router-view></router-view>
    </div>
</template>

<style scoped>

</style>
/**导入创建路由对象函数 */
import {createRouter, createWebHashHistory} from 'vue-router'

//导入组件
import ShowDetail from '../components/ShowDetail.vue'
import ShowDetail2 from '../components/ShowDetail2.vue'

//通过函数创建路由对象
const router = createRouter({
    history:createWebHashHistory(),
    routes:[
        {
            //键值对参数默认自动解析,无需占位符
            path:"/showDetail2",
            component:ShowDetail2  
        },
        {
            //路由路径传参:为该路径设置占位符
            path:"/showDetail/:id/:language",
            name:"showDetail",
            component:ShowDetail
        }]
})

//导出路由对象
export default router

5. 路由守卫

//路由守卫
/**
 * 全局前置守卫:在路由切换之前被调用
 * 可用于对数据进行处理,校验用户是否登录等功能
 * to   代表发送数据到哪去
 * from 代表请求数据从哪来
 * next 代表放行,不调用默认拦截(类似filterChen)
 */
router.beforeEach(
    (to, from, next) => {
        console.log("before")
        console.log(from.path)
        console.log(to.path)
        //放行,不执行该方法默认拦截
        next()
})

/**
 * 全局后置守卫:在路由切换之后被调用
 * 可用于处理数据
 */
router.afterEach(
    (to, from) => {
        console.log("after")
    }
)

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

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

相关文章

贪心算法----摆动序列

今日题目&#xff1a;leetcode376 点击跳转题目 观察样例2&#xff1a; 发现最长摆动序列都是极大值和极小值 再加上两个端点&#xff0c;那么我们保证每次都能选择到每个极值点&#xff0c;就能从局部最优推广全局最优了&#xff01; 但是还有一些细节情况需要注意&#xff…

基于springboot+vue+Mysql的外卖点餐系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【Linux】-IP地址、主机名配置[5]

目录 一、IP和主机名 1、IP地址 2、特殊IP地址 3、主机名 4、在Linux中修改主机名 5、配置主机名映射 二、虚拟机配置固定IP 1、为什么需要固定IP 2、在VMware Workstation中配置固定ip 一、IP和主机名 1、IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和…

淘宝扭蛋机小程序:开启你的幸运探索之旅!

在淘宝的星辰大海中&#xff0c;我们为您点亮了一颗全新的幸运之星——淘宝扭蛋机小程序。这是一个集惊喜、乐趣与收藏于一体的创新平台&#xff0c;让您随时随地都能感受到扭蛋带来的无限魅力。 一、探索未知的幸运 淘宝扭蛋机小程序&#xff0c;将传统扭蛋机的神秘与淘宝购…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日&#xff0c;Meta在官网上公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;70B&#xff09;两个小参数版本&#xff0c;上下文窗口为8k&#xff0c;据称&#xff0c;通过使用更高质量的训练数据…

JavaScript 动态网页实例 —— 事件处理应用

前言 事件处理的应用很广泛。在事件处理的应用中,鼠标事件的应用是最常用到的。本章给出几个鼠标事件处理应用的示例,包括:页面预览、图像切换、点亮文本、鼠标跟随、鼠标感应和禁用鼠标按键。在这些示例中,有的可以直接拿来应用,有的则只提供了一种应用的方法,稍加拓展,…

聚合工程搭建、工程依赖导入

上一章讲了自动化云测平台的一些环境的准备 如果还未完成云服务器的环境搭建和本地环境的搭建&#xff0c;请点击左侧 -> 传送门 那么正式开始这一章的内容 聚合工程搭建 创建项目 我们先给项目命个名&#xff1a;xxx-meter&#xff0c;构建系统&#xff0c;我们选择M…

MySQL中索引失效的问题

索引失效的情况 这是正常查询情况&#xff0c;满足最左前缀&#xff0c;先查有先度高的索引。 1. 注意这里最后一种情况&#xff0c;这里和上面只查询 name 小米科技 的命中情况一样。说明索引部分丢失&#xff01; 2. 这里第二条sql中的&#xff0c;status > 1 就是范围查…

WPF之工具栏菜单栏功能区。

1&#xff0c;菜单栏&#xff0c;工具栏&#xff0c;状态栏。 1.1&#xff0c;Menu中可添加菜单分隔条<Separator></Separator>作为分割线&#xff0c;使用Separator可以通过改变其template来自定义&#xff0c;Separator是无焦点的&#xff0c;如果简单的在MenuIt…

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …

心理应用工具包 psychtoolbox 绘制小球走迷宫

psychtoolbox 是 MATLAB 中的一个工具包&#xff0c;对于科研人员设计实验范式来说是不二之选&#xff0c;因为它可以操作计算机的底层硬件&#xff0c;精度可以达到帧的级别。 文章目录 一、实验目的二、psychtoolbox 的下载安装三、Psychtoolbox 的基本使用四、完整代码 一、…

即插即用篇 | YOLOv8 引入多光谱通道注意力 | 频率领域中的通道注意力网络

本改进已集成到 YOLOv8-Magic 框架。 注意力机制,尤其是通道注意力,在计算机视觉领域取得了巨大成功。许多工作聚焦于如何设计高效的通道注意力机制,同时忽略了一个基本问题,即通道注意力机制使用标量来表示通道,这很困难,因为会造成大量信息的丢失。在这项工作中,我们从…

Zabbix监控中文乱码问题解决方法

一、问题描述 1.查看Zabbix仪表盘 在Zabbix的监控仪表盘界面&#xff0c;字体显示为“方框”&#xff0c;无法查看到具体的性能指标名称。 2.问题分析 Zabbix的web端没有中文字库&#xff0c;导致切换到中文页面&#xff0c;中文成了乱码这个问题&#xff0c;我们最需要把中文…

Stable Diffusion教程|图生图原理和实战

Stable Diffusion凭借其卓越的图生图功能&#xff0c;极大地提升了图像生成的可控性与输出品质&#xff0c;赋予用户前所未有的个性化创作风格表达能力。这一革新特性使得Stable Diffusion不仅能精准地捕捉用户的艺术愿景&#xff0c;更能以数字化手段孕育出新颖且极具创意的画…

流量过滤与转发路径控制

1.策略路由 &#xff08;1&#xff09;策略路由技术背景 &#xff08;2&#xff09;PBR介绍-基本概念 &#xff08;3&#xff09;PBR介绍-结构 &#xff08;4&#xff09;PBR介绍-命令语法 PBR的节点匹配模式&#xff1a; permit表示对满足匹配条件的报文进行策略路由 deny表示…

OpenAI下周发布更新;TikTok将自动标记AIGC;智谱AI亮相2024 ICLR

OpenAI 官宣下周举办直播发布更新 OpenAI 今日凌晨官宣&#xff0c;将在当地时间 5 月 13 日上午十点&#xff08;北京时间 5 月 14 日凌晨两点&#xff09;在官网进行直播&#xff0c;届时将演示一些 ChatGPT 和 GPT-4 的更新。 OpenAI CEO Sam Altman 补充表示&#xff0c;届…

【C++】-------反向迭代器的模拟实现(补充)

目录 前言 一、反向迭代器接口&#xff08;用户层&#xff09; 二、模拟实现 三、以vector模拟实现为例 四、总结 前言 在vector和list的接口中我们实际上有说明过反向迭代器的用法&#xff0c;这里就有个问题&#xff0c;并不是只有这两个容器存在反向迭代器的。那么对于他…

【力扣】63.不同路径 II

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中&#xff0c;资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全&#xff0c;需要采用一些有效的方法。其中之一是生产者/消费者模式&#xff0c;它是一种经典的并发设计模式&#xff0c;用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

零代码平台助力中国石化江苏油田实现高效评价体系

概述&#xff1a; 中国石化集团江苏石油勘探局有限公司面临着评价体系依赖人工处理数据、计算繁琐且容易出错的挑战。为解决这一问题&#xff0c;他们决定借助零代码平台明道云开发江苏油田高质量发展经济指标评价系统。该系统旨在实现原始数据批量导入与在线管理、权重及评分…