网站首页 > 技术文章 正文
在原生 JavaScript 中监听路由变化的方式主要分为两种场景:监听哈希(Hash)路由变化和监听 History API 的路由变化。Vue 框架本身并不直接处理路由监听,但 Vue 的官方路由库 vue-router 内部会封装这些原生机制。
一、原生 JavaScript 监听路由变化
1. 监听哈希(Hash)路由变化
当 URL 的哈希部分(# 后的内容)发生变化时,可以通过 hashchange 事件监听:
window.addEventListener('hashchange', () => {
const hash = window.location.hash; // 获取当前 hash
console.log('Hash changed to:', hash);
});
// 示例:修改 hash 触发事件
window.location.hash = 'new-hash';
2. 监听 History API 的路由变化
当使用 history.pushState() 或 history.replaceState() 修改路由时,需要通过以下方式监听:
- 拦截原生方法:覆盖 pushState 和 replaceState,手动触发事件。
- 监听 popstate 事件:浏览器前进/后退操作会触发该事件,但直接调用 pushState 不会。
// 覆盖 history.pushState 和 history.replaceState
const originalPushState = history.pushState;
history.pushState = function(state, title, url) {
originalPushState.apply(history, arguments);
// 手动触发自定义事件
window.dispatchEvent(new Event('pushstate'));
};
// 监听自定义事件和 popstate
window.addEventListener('pushstate', handleRouteChange);
window.addEventListener('popstate', handleRouteChange);
function handleRouteChange() {
const path = window.location.pathname; // 获取当前路径
console.log('Route changed to:', path);
}
// 示例:使用 pushState 修改路由
history.pushState({}, '', '/new-path');
二、Vue 框架中的路由监听
在 Vue 项目中,通常使用 vue-router 库管理路由,它会自动封装原生路由监听逻辑,开发者无需手动处理。vue-router 提供了两种模式:
- Hash 模式:基于 URL 哈希(如 http://example.com/#/home)。
- History 模式:基于 History API(需要服务器支持)。
1. Vue 中监听路由变化的方式
- 通过 watch 监听 $route:
export default {
watch: {
'$route'(to, from) {
console.log('路由变化:', to.path);
}
}
};
- 使用导航守卫
router.beforeEach((to, from, next) => {
console.log('即将进入路由:', to.path);
next();
});
2. Vue 是否需要原生路由监听?
- 不需要:vue-router 内部已经通过 hashchange 和 popstate 等原生事件监听路由变化,开发者只需使用其提供的 API(如 $route、导航守卫)。
- 特殊场景:如果需要在 Vue 之外监听路由(如微前端架构),可以结合原生方法,但要避免与 vue-router 冲突。
总结
场景 | 原生 JavaScript | Vue (vue-router) |
哈希路由变化 | hashchange 事件 | 使用 watch: { $route } 或导航守卫 |
History 路由变化 | 覆盖 pushState + 监听 popstate 事件 | 自动处理,无需额外代码 |
适用场景 | 纯原生项目、无框架环境 | 基于 Vue 的单页应用(SPA) |
建议在 Vue 中直接使用 vue-router 的 API,避免重复造轮子。
猜你喜欢
- 2025-05-02 前端分享-少年了解过iframe么(问一下少年)
- 2025-05-02 从零打造微前端框架:实战“汽车资讯平台”项目
- 2024-09-12 珠峰-前端架构师2023最新版
- 2024-09-12 太强了!牛客网曝光vite的微前端框架 -vite-micro,引发热潮
- 2024-09-12 基于大数据的前端应用架构设计与实现
- 2024-09-12 2023最新版-Web前端架构师(35周完结无密)
- 2024-09-12 基于 iframe 的微前端框架
- 2024-09-12 微前端项目部署方案
- 2024-09-12 1??微前端、乾坤、singleSpa
- 2024-09-12 前端高手特训 从0到1带你手写一个微信小程序底层框架-itzcw分享
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 566℃几个Oracle空值处理函数 oracle处理null值的函数
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)