Vue3学习 路由

jeecgboot-vue3 路由学习分享 jeecgboot vue3 路由 阅读详情

安装router

npm init vite@latest
npm install
npm install vue-router@4 -S

创建: src/router/index.ts

import {createRouter, createWebHistory} from 'vue-router'

const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        name:'Login'
        component:()=>import('../components/Login.vue')
    },
    {
        path:'/reg',
        name:'Reg',
        component:()=>import('../components/Reg.vue')
    },
    {
        path:'/logout/:id',
        name:'Logout',
        component:()=>import('../components/Logout.vue')
    }
]
const router = createRouter({
    history:createWebHistory(),
    routes:routes
})
export default router

在main.ts中注册

import router from './router'
app.use(router)

在App.vue中使用

<router-link to="/">Login</router-link>
<router-link to="/reg">Regist</router-link>
<router-view></router-view>

路由的模式

createWebHashHistory()
location.hash = '/'  跳转到Login.vue 使用hash时url路径带有#
window.addEvenetListener('hashchange',(e)=>{   //监听浏览器前进后退按钮的变化
    console.log(e)
})

createWebHistory() 基于H5的history来实现,URL不带#
window.addEvenetListener('popstate',(e)=>{   //监听浏览器前进后退按钮的变化
    console.log(e)
})
history.pushState({state:1},'', '/reg') 不会被浏览器监听到

命名路由和编程式导航

<router-link to="{name:'Login'}">Login</router-link>
<router-link to="{name:'Reg'}">Regist</router-link>
或
<a href='/'>Login</a>
<a href='/reg'>Regist</a> //这种方式和router-link的不一样是页面会刷新
<router-view></router-view>

编程式导航

@click='toPage("/reg")'

import {useRouter} from 'vue-router'
const router = useRouter()
const toPage = (url:string)=>{
    router.push(url)
    或对象的形式
    router.push({
        path:url   //还可以传递参数
    })
    也可以是命名式跳转,path改成name  @click='toPage("Reg")'
    router.push({
        name:urlName   //还可以传递参数
    })
}

历史记录 使用replace来防止页面前进后退

<router-link replace :to="{name:'Login'}">Login</router-link>

编程式防止页面前进后退

router.replace({
    path:url   //还可以传递参数
})

编程式实现前进后退

const next = ()=>{
    router.go(1);
    //router.go(-1);  后退
}

const prev = ()=>{
    router.go(-1);  或  router.back();
}

路由传参

A.vue 

@click=toDetails(item)

import {useRouter} from 'vue-router'
import {data} from './data.js'   //js中为{data:[{name:'Jason', price:2.0, id:1001},{}]}

type ItemData = {
    name:string,
    price:number,
    id:number
}

const router = useRouter()

const toDetails = (item:ItemData)=>{
    //query方式,参数拼接在url上,接收方也用query来取
    router.push({
        path:'/reg',
        query:item   
    })
    //params式传参,只能用name,参数不显示在url中
    router.push({
        name:'Reg',
        params:item
    })
    
    //动态路由参数
    router.push({
        name:'Reg',
        params:{
            id:item.id
        }
        //或者直接params:item,因为item中有id属性
    })
}

Reg.vue

//接收query式传参
{{ route.query.name }}

//接收params式传参
{{ route.params.name }}

import {useRoute} from 'vue-router'
const route = useRoute()

嵌套路由

适用于一个页面中部分内容不变,部分需要变化的场景,比如后台管理界面和手机界面

const routes:Array<RouteRecordRaw> = [
    {
        path:'/user',
        component:()=>import('../components/Footer.vue')
        children:[
            {
                path:'', //默认路由地址
                name:'Login',
                component:()=>import('../components/Login.vue')
            },
            {
                path:'/reg',
                name:'Reg',
                component:()=>import('../components/Reg.vue')
            }
        ]
    }
]

Footer.vue

<router-view></router-view>
<router-link to="/user">Login</router-link> 
<router-link to="/user/reg">Regist</router-link>

命名视图

const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('../components/Root.vue')
        children:[
            {
                path:'/user1',
                components:[
                    default:()=>import('../components/AAA.vue')
                ]
            },
            {
                path:'/user2',
                components:[
                    bbb:()=>import('../components/BBB.vue'),
                    ccc:()=>import('../components/CCC.vue')
                ]
            }
        ]
    }
]

Root.vue

<router-link to='/user1'>User1</router-link>
<router-link to='/user2'>User2</router-link>
<router-view></router-view>
<router-view name='bbb'></router-view>
<router-view name='ccc'></router-view>

重定向和别名

const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('../components/Root.vue'),
        redirect: '/user1',  //重定向  或{path:'/user1', query:{}} 或 {name:'User1',params:    
                    {}} 或 to=>{return '/user1'} 或to=>{return {name:'User1',params:{}}}
        alias:['/root','/rt'] //取别名
        children:[
            {
                path:'/user1',
                name:'User1',
                components:[
                    default:()=>import('../components/AAA.vue')
                ]
            },
            {
                path:'/user2',
                components:[
                    bbb:()=>import('../components/BBB.vue'),
                    ccc:()=>import('../components/CCC.vue')
                ]
            }
        ]
    }
]

前置及后置守卫

import {createRouter, createWebHistory} from 'vue-router'

const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('@/views/Login.vue')
    },
    {
        path:'/index',
        component:()=>import('@/views/Index.vue')
    }
]
const router = createRouter({
    history:createWebHistory(),
    routes:routes
})
export default router

登录成功后保存token

localStorage.setItem('token', '123');

前置守卫 main.ts中:

const whiteList = ['/']
router.beforeEach((to, from, next)=>{
     if(whiteList.includes(to.path) || localStorage.getItem('token')) {
        next()
     }else{
        next('/') //不在白名单或没有凭证的话,跳转回登录界面
     }
})

后置守卫 
LoadingBar.vue

defineExpose({
    startLoading,
    endLoading
})

main.ts中:

import { createApp, createVNode,render } from 'vue'
import loadingBar from '@/views/LoadingBar.vue'

const VNode = createVNode(loadingBar)  //转换成虚拟dom
render(VNode, document.body) //将虚拟函数挂载到body
router.beforeEach((to, from, next)=>{
    VNode.component?.exposed?.startLoading()
})
router.afterEach((to, from) => {
    VNode.component?.exposed?.endLoading()
})

路由元信息

src/router/index.ts

declare module 'vue-router' {
    interface RouteMeta {
        title:string
    }
}
const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('@/views/Login.vue'),
        meta:{
            title:'登录'
        }
    }
]

main.ts中:

router.beforeEach((to, from, next)=>{
    document.title=to.meta.title
})

路由过渡动效

src/router/index.ts

declare module 'vue-router' {
    interface RouteMeta {
        title:string,
        transition:string
    }
}
const routes:Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('@/views/Login.vue'),
        meta:{
            title:'登录',
            transition:'animate_fadein'
        }
    }
]

 App.vue

<router-view #default='{route, Component}'>
    <transition :enter-active-class="`animate__animated ${route.meta.transition}`">
        <component :is='Component'></component>
    </transition>
</router-view>

动态路由

1: 从后台返回路由配置信息
2: 登录成功后调用后台服务获取用户路由信息,使用addRoute和removeRoute来动态添加上删除路由信息

import {useRouter} from 'vue-router'
const router = useRouter()

const initRouter = async()=>{
    const result = await axios.get('http://localhost:8080/login',{params:formInline})
    result.data.route.forEach((v:any)=>{
        router.addRoute({
            path:v.path,
            name:v.name,
            component:()=>import(`../views/${v.component}`)  //注意这里不能用@代替src
        })
    })
}


    
    

Vue3学习汇总(路由篇) 路由篇 阅读详情

相关推荐

Vue3【路由元信息、过渡动效、滚动行为、路由懒加载、动态路由、路由高亮】(十一)-全面详解(学习总结---从入门到深化)

Vue3【路由元信息、过渡动效、滚动行为、路由懒加载、动态路由、路由高亮】(十一)-全面详解(学习总结---从入门到深化)

1191

Vue3学习笔记2——路由守卫

vue3中路由守卫的基本函数操作

green_pine_的博客 444

迈创cameralink采集卡安装操作说明

迈创cameralink采集卡安装操作说明MIL软件安装MIL软件下载获取MIL软件安装MIL软件安装常见问题 MIL软件安装 MIL软件下载获取 MIL软件安装 解压MIL安装包,点击MilSetup.exe开始安装,如下图所示; 备注:64位系统MIL软件可以同时安装32位和64位客户端,本文档默认安装64位客户端,64位系统安装32位MIL方法后续再展开讲(不建议这样用,很麻烦) 点击Launch Installation开始安装,64位系统,默认只安装64位MIL客户端 根据采集卡驱动,选择M

qq_23107577的博客 9354

Java后端程序员学习前端之Vue3路由

安装命令:npm i vue-router。

2302_76909185的博客 610

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 501

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

Vue3学习02 路由

路由器工作模式、to的两种写法、命名路由、嵌套路由、路由传参(query、params)、路由规则的props配置、replace属性、编程式导航

yavlgloss的博客 1089

【YOLO 系列】基于YOLOv8的工业零件表面缺陷智能检测系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了如何基于YOLOv8深度学习模型和PyQt5图形界面,构建一套完整的工业零件表面缺陷智能检测系统。内容涵盖从环境搭建、数据集标注、模型训练调参到最终封装成可执行桌面软件的全流程,并深入解析了YOLOv8在工业视觉场景中的技术优势与落地优化策略。

ol78901234的博客 402

Vue3 路由学习笔记

路由命名:为重要路由设置 name,方便跳转和维护参数传递必填参数用params可选参数用query编程式导航:在方法中跳转时使用组件通信:优先使用路由参数,而不是 Vuex/pinia通过合理使用 Vue Router,可以构建出体验良好的单页面应用,实现流畅的页面切换和导航体验。

l____m的博客 385

2024年全国大学生电子设计竞赛A题_AC-AC变换电路并联运行

AC-AC变换电路并联运行(A 题)【本科组】

qq_74395263的博客 7839

【QNX+Android虚拟化方案】01 - 芯片介绍

【QNX+Android虚拟化方案】01 - 芯片介绍

|~~~热爱生活、努力学习的小伙汁~~~| 2948

Vue学习之路(3)——路由

应用场景 在一个系统中,一般会由很多页面组成,当一个页面要跳转到另外一个页面的时候是通过改变url路径来实现的,这个时候Vue需要知道当前url对应的那个组件页面,这个控制者就是vue-router。 下载 使用vue-router需要载入vue-router.js。 优快云资源 基本用法 布局 <!--使用router-link组件来导航,to属性指定链接--> &...

Hydra的博客 432

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 346

vue3路由学习简记

来自。

weixin_50946965的博客 1106

【IPC】ONVIF Device Manager 测试工具

介绍onvif 协议测试工具

以实战经验介绍行业知识 1961

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Vue3】学习命名路由和嵌套路由

下一节我们接着本节的内容,介绍有关传参的内容挑战与创造都是很痛苦的,但是很充实。

null18的博客 1265

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

前端vue3 路由——学习记录

但这样传参的缺点是,传过去的id和name都是字符串,to=“/news/detail?同样的方式,在你想要添加子展示区的page组件中,使用<RouterLink>和<RouterView>,注意to的用法为 to:"/news/detail",要把路径写完整,只写detail的话就会变成和news路由平行的路由,匹配不到。像上面那种,Detail.vue文件接收参数需要用的query.id,params.id,这样很麻烦,路由props配置项让路由组件更方便的收到参数(可以将路由参数作为。

m0_60549223的博客 683

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Vue3学习——路由

特别注意:路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!

m0_49494051的博客 651

vue3学习——路由

main,ts 注册。

m0_49494051的博客 549

Vue3的学习(二)路由

简单路由案例:配置路由规则,createWebHistory是指定路由的工作模式,routes中的每个元素都是一个配置好的路由,其中path是路由的路径,component是该路由对应的组件挂载app组件之前,要让其配置上路由,使用.use(router)app.vue:其中RouterLink标签是用于定位路由的,to就是指定按下该dom后路径会跳向哪个,active-class是指定当为当前路由时,该dom会应用上该class,可以用于指定路由激活时的样式。

二狗mao的博客 1126

Vue Router v3.x 快速入门学习 【路由篇】

💎Vue Router是Vue.js(opens new window)官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。这里为什么要分v3.x和v4.x两篇来写的,主要还是两者在项目使用中着实有不小的差距。💯本人在 基于Vue2的老项目和基于Vue3的新项目上在路由这块确实懵逼过。在 Vue2 项目上安装路由组件的时候经常会安装v4.x版本,然后就各种问题。所以我们先从v3.x版本学习,然后再对比v4.x版本看看都有哪些差异。

李赛赛的专栏 1742

Vue3实战学习(Vue3集成Vue-Router(嵌套路由、路由守卫、404NotFound页面设计与路由配置))(下)(8)

本篇博客的内容:实现Vue3集成Vue-Router(路由)。详细讲到了嵌套路由(父、子级路由配置)的使用(<RouterView/>)、路由守卫(导航守卫:路由跳转修改网页标题)(beforeEach())、404NotFound页面的设计与路由跳转配置(详细操作)...还有内容在《Vue3集成Vue-Route》(上)...

岁岁岁平安的博客 2187

Vue3 学习笔记 5:路由

本文介绍了Vue3路由的基本配置与使用。主要内容包括:安装vue-router并创建路由文件,配置路由规则和对应组件;在App.vue中使用RouterView和RouterLink实现路由跳转;通过active-class实现导航高亮效果;以及两种路由器工作模式(History和Hash)的区别。文章通过完整代码示例展示了如何实现一个包含标题、导航栏和内容展示区的路由应用,并说明了路由切换时组件的生命周期变化。

梦幻天空 792

Vue 3 路由与懒加载入门:从零完成一个迷你学习中心

理解了 Vue 页面组件和路由之间的区别;学会了安装并注册 Vue Router;理解了path和component的作用;理解了RouterLink负责跳转;理解了RouterView负责显示页面;学会了使用children配置子路由;理解了父组件中为什么还需要一个RouterView;学会了使用redirect设置默认子页面;理解了普通导入和动态导入的区别;理解了的完整执行过程;学会了使用浏览器 Network 面板观察懒加载。路由name和命名跳转;

weixin_55966773的博客 260

VUE3 路由学习(一)

VUE3 路由学习日记(一)

xiaoqin5的博客 463

Vue3学习与实战 · 配置使用vue-router路由

随着Vue版本的升级,Vue 2.x项目和Vue 3.x项目在使用vue-router上有些区别,本文就简单介绍下vue-router在Vue3中的配置和使用。 一、目录结构 demo/ package.json vite.config.js index.html public/ src/ api/ assets/ common/ components/ store/ v

天问博客-专注于大前端技术 1725
上一篇: Vue3学习 组件之间的传参
下一篇: Vue3学习
Wo_Ai_Java
博客等级 码龄16年 26粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值