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

Vue Router (编程式导航)

前言:

编程式导航:应用程序中通过代码(而不是用户点击链接或按钮等手动操作)来控制页面或视图的跳转与导航。

在传统的多页应用(MPA)中,页面之间的跳转通常是通过 <a>标签实现的,即用户点击链接后浏览器加载新的页面。但在单页应用(SPA)中,页面并不会真正刷新,而是通过 JavaScript 动态地切换视图内容。为了实现这种视图间的切换,我们就需要用到 路由(Router),并通过 编程式导航​ 在代码中控制路由的跳转。

1、基本用法( router.push )

会向浏览器的历史堆栈中添加一个新的记录,当用户点击浏览器的后退按钮时,他们会返回到之前的 URL。

声明式编程式
<router-link :to="...">router.push(...)
// 在组件中,可以通过 this.$router 访问路由实例
// 导航到一个不同的 URL
this.$router.push('/some/path');
// 使用一个命名路由,同时提供路由参数
this.$router.push({ name: 'user', params: { userId: 123 }});
// 带查询参数,最终 URL 为 /register?plan=private
this.$router.push({ path: '/register', query: { plan: 'private' }});
// 带 hash 的导航,最终 URL 为 /about#team
this.$router.push({ path: '/about', hash: '#team' });

2、替换当前位置(router.replace

如果你想替换当前历史记录而不是添加新的记录,可以使用 router.replace 方法。这通常用于避免用户点击后退按钮返回到一个特定的 URL:

声明式编程式
<router-link :to="..." replace>router.replace(...)
// 替换当前历史记录
this.$router.replace('/another/path');
// 相当于
this.$router.push({path: '/another/path',replace: true  // 关键在这里!
});router.push({ path: '/home', replace: true })
// 相当于
router.replace({ path: '/home' })

3、横跨历史记录(router.go )

router.go 方法允许你在历史记录中前进或后退特定的步数,类似于 window.history.go(n)

// 向前移动一条记录,与 router.forward() 相同
router.go(1)// 返回一条记录,与 router.back() 相同
router.go(-1)// 前进 3 条记录
router.go(3)// 如果没有那么多记录,静默失败
router.go(-100)
router.go(100)

4、篡改历史

router.pushrouter.replace 和 router.go 是 window.history.pushState、window.history.replaceState 和 window.history.go 的翻版,它们确实模仿了 window.history 的 API。

注意:

  • 当使用 router.push 或 router.replace 时,你可以传递一个字符串路径,或者一个描述地址的对象。

  • 如果提供了 pathparams 会被忽略。你需要提供路由的 name 或手写完整的带有参数的 path

  • router.push 和 router.replace 方法返回的是一个 Promise,可以让你知道导航是否成功。

一个 Promise对象有以下 三种状态

状态

说明

是否可变

pending(等待中)

初始状态,既没有完成,也没有失败

✅ 可变为 fulfilled 或 rejected

fulfilled(已成功)

意味着操作成功完成,通常会有一个返回值(result)

❌ 不可再变

rejected(已失败)

意味着操作失败,通常会携带一个错误信息(reason)

❌ 不可再变

编程式导航提供了更灵活的方式来控制路由跳转,特别是在需要根据用户行为或其他逻辑动态决定路由跳转时。通过 JavaScript 代码,我们可以更精确地控制应用的导航行为。

http://www.dtcms.com/a/594304.html

相关文章:

  • 特斯拉 Tesla 面试经验分享|流程全解析 + 技术细节 + 面试感受
  • .net网站开发面试网站平台定制开发
  • 网站制作公司咨询工作内容个人做网站可以盈利么
  • 【Unity】MMORPG游戏开发(十)断线恢复
  • 深圳app开发公司哪家服务好网站建设丶seo优化
  • C#/.NET/.NET Core技术前沿周刊 | 第 期(年.-.)
  • 手机网站标准自助建站系统哪个好用
  • 科技赋能文博传播 众趣科技引领数字博物馆虚拟展厅新生态
  • 科技驱动服务升级 榕树钱小乐的创新发展之路
  • 如何系统提升英文科技文献阅读能力:方法、工具与 30 天训练计划
  • 网站开发费用摊销时间深圳 网站公司
  • 网站建设案例方案做ppt卖给网站
  • 银行App关停潮下的物联网破局:从“数量冗余“到“智慧集约“
  • 文献分享日报15
  • 为什么最近好多网站维护南通市网站
  • 西亚网站建设科技江西省建设监理协会网站
  • kubernetes的包的管理--helm
  • opencv 学习: 06 使用指针遍历像素,以均匀颜色量化为例
  • 网站改版 被百度k网页设计素材 旅游
  • C++ 设计模式《智能任务助手上线,小明用上了解释器》
  • 小型企业建设网站陕西网站建设公司找哪家
  • Rust编译时计算:`const` 函数、泛型与高级类型体操
  • 从零开始理解和编写LLM中的KV缓存
  • 做离线版申报表进入哪个网站广告设计专业术语
  • 做网站维护要学些什么·咋做网站代码背景图
  • zustand解决的痛点以及zustand状态管理与C++全局变量的区别对比
  • 介绍自己做的网站室内设计奖项有哪些
  • 基于Zigbee协议的分布式漏水检测系统设计与实
  • 网站建设中怎么设置默认页小小影院 电视剧免费
  • 蓝牙钥匙 第73次 蓝牙与蜂窝网络:技术特性与互补优势