当前位置: 首页 > ops >正文

vue3路由详解

基础概念

路由(route):

  • 表示一个 URL 与组件的映射关系

  • 包含路径(path)、组件(component)、名称(name)等配置项

路由器(router):

  • 管理所有路由的中央控制器

  • 负责监听 URL 变化并匹配对应路由

Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。

路由视图 (<router-view>):

  • 渲染匹配到的路由组件的容器

  • 相当于一个动态的组件占位符

路由链接 (<router-link>):

  • 声明式的导航组件,替代传统的 <a> 标签

  • 不会触发页面刷新,只更新匹配的组件

简单运用

路由文件

有name属性的为命名路由,可以直接使用name属性进行导航跳转

入口文件

模板

路由的工作模式

hash 模式(默认模式)

  1. url 中使用 # 符号(如 http://example.com/#/home
  2. 无需服务器配置,适合纯前端单页应用(SPA)
  3. # 后的内容不会发送到服务器,完全由前端处理
const router = createRouter({history: createWebHashHistory(), // 使用 hash 模式routes: [...],
});

history 模式

  1. url 更简洁(如 http://example.com/home),无 #
  2. 需要服务器支持(避免 404 错误,需配置回退到 index.html
  3. 适合需要 seo 或对 url 美观有要求的项目
import { createRouter, createWebHistory } from 'vue-router';const router = createRouter({history: createWebHistory(), // 使用 history 模式routes: [...],
});

abstract 模式,在非浏览器环境(如 Node.js、移动端原生应用)中使用,在这就不过多介绍

router-link中 to 的两种写法

字符串形式

<router-link to="/home">首页</router-link>
<router-link to="/about">关于</router-link>

对象形式

<router-link :to="{ path: '/search', query: { q: 'vue' } }">搜索</router-link>

路由传参

params 传参

// 路由配置
const routes = [{path: '/user/:id',name: 'user',component: User}
]// 导航跳转
router.push({ name: 'user', params: { id: 123 } })//或
<router-link :to="{ name: 'user', params: { id: 123 }}">用户</router-link>// 或
router.push('/user/123')// 组件中获取
import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.params.id) // 123​

使用 params 时,如果提供了 path,params 会被忽略,记得搭配 name 使用

确保路由配置中有相应的参数占位符,即 path: '/user/:id' 中的 :id

query 传参

// 导航跳转
router.push({ path: '/user', query: { id: 123 } })//或
<router-link :to="{ path: '/user', query: { id: 123 } }">用户</router-link>// 或
router.push('/user?id=123')// 组件中获取
const route = useRoute()
console.log(route.query.id) // 123

props 传参

// 路由配置
const routes = [{path: '/user/:id',name: 'user',component: User,props: true // 将 params 作为 props 传递},{path: '/about',name: 'about',component: About,props: (route) => ({ query: route.query.q }) // 函数形式},{path: '/profile',name: 'profile',component: Profile,props: { newsletterPopup: false } // 对象形式}
]// 组件中接收
export default {props: ['id', 'newsletterPopup', 'query'],setup(props) {console.log(props.id)}
}

常用的是的第一种和第二种,对象形式的使用频率不高

push属性和replace属性

概念:routerlink 指令提供了 replace 和 push 两种导航行为控制方式,它们决定了如何将新路由添加到浏览器的历史记录中

push(默认行为)

行为:将新路由推入历史记录栈

效果:用户可以通过浏览器的后退按钮返回到前一个页面

(默认就是 push 行为,所以不需要特别指定)

replace

行为:替换当前历史记录条目

效果:用户不能通过后退按钮返回到前一个页面(因为前一个页面被替换了)

<router-link :to="{ path: '/home' }" replace>首页</router-link>

编程式路由导航

使用 router.push

import { useRouter } from 'vue-router'// 在 setup 函数中
const router = useRouter()// 导航到指定路径
router.push('/home')// 使用命名路由
router.push({ name: 'user', params: { id: '123' } })// 带查询参数
router.push({ path: '/register', query: { plan: 'private' } })

使用 router.replace

router.replace('/login')
router.replace({ name: 'user', params: { id: '123' } })

使用 router.go

// 前进一条记录,相当于 window.history.forward()
router.go(1)// 后退一条记录,相当于 window.history.back()
router.go(-1)// 前进 3 条记录
router.go(3)

导航结果处理

router.push 和 router.replace 返回一个 Promise

router.push('/dashboard').then(() => {// 导航成功
}).catch(error => {// 导航被中止if (error.name === 'NavigationDuplicated') {// 处理重复导航的情况}
})

重定向

在路由系统中,重定向是指将用户从一个URL自动导航到另一个URL的过程。

const router = createRouter({({routes: [{ path: '/old-path', redirect: '/new-path' },{ path: '/new-path', component: NewComponent }]
});
http://www.xdnf.cn/news/16094.html

相关文章:

  • ubuntulinux快捷键
  • 第1章第2章笔记
  • 大模型【进阶】(四)QWen模型架构的解读
  • 前端跨域请求原理及实践
  • 顺丰面试提到的一个算法题
  • 不一样的Mysql安装方式
  • linux性能调整和故障排查
  • Hexo - 免费搭建个人博客04 - 创建另一个私人仓库,对Hexo项目进行版本管理
  • #Linux内存管理# 详细介绍madvise函数的工作原理
  • 突发限制下的破局之路:国产之光 Lynx 重构 AI 开发安全壁垒
  • day 33打卡
  • 基于MCP架构的LLM-Agent融合—构建AI Agent的技术体系与落地实践
  • C++(面向对象封装、继承、多态)
  • Hexo - 免费搭建个人博客03 - 将个人博客托管到github,个人博客公开给大家访问
  • 从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
  • OMS监考系统V2版本无法启动问题解决办法
  • 单片机-----基础知识整合
  • 人工智能——Opencv图像色彩空间转换、灰度实验、图像二值化处理、仿射变化
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyter’问题
  • 大模型开发
  • PDF转Word的简单方法
  • 射频信号(大宽高比)时频图目标检测anchors配置(下)
  • Github上传文件流程图
  • pytest简单使用和生成测试报告
  • Axios 响应拦截器
  • SpringBoot 使用Rabbitmq
  • EDoF-ToF: extended depth of field time-of-flight imaging解读, OE 2021
  • C语言常见的预定符号常量
  • LeetCode 热题100:160.相交链表
  • 神经网络和机器学习的一些基本概念