1. 核心区别
Vue Router 路由跳转
-
基于前端路由(SPA 单页应用) :
- 仅改变 URL 地址,不刷新页面。
- Vue Router 的跳转会动态加载相应的组件,而无需重新加载整个页面资源(HTML、CSS、JS 等)。
-
使用方法:
- 编程式导航:
router.push()
或router.replace()
。 - 声明式导航:
<router-link>
。
- 编程式导航:
location.href 跳转
-
基于浏览器原生导航(多页应用) :
- 直接刷新整个页面,浏览器会重新请求服务器加载页面资源。
- 会触发页面的完整生命周期(如
window.onload
)。
-
使用方法:
- 设置
window.location.href
或直接操作location.href
。
- 设置
2. 使用方式对比
Vue Router 跳转示例
// 编程式导航
this.$router.push('/home'); // 跳转到 /home
this.$router.replace('/about'); // 替换当前路由为 /about
// 动态参数
this.$router.push({ name: 'user', params: { id: 123 } });
location.href 跳转示例
// 改变浏览器地址并刷新页面
window.location.href = '/home';
// 动态地址
window.location.href = `/user?id=${123}`;
3. 特性对比
特性 | Vue Router 跳转 | location.href 跳转 |
---|---|---|
是否刷新页面 | 不刷新页面,仅更新视图 | 刷新页面,重新加载所有资源 |
历史记录 | 可控制(push 会新增历史记录,replace 不新增) | 总是新增历史记录 |
页面性能 | 高效,无需重新加载页面资源 | 开销大,需要重新加载 HTML、CSS、JS 等资源 |
传参方式 | 支持动态参数和查询参数(params 和 query ) | 支持查询参数(通过 URL 字符串拼接) |
浏览器默认行为 | 不触发原生跳转事件 | 触发完整的浏览器跳转逻辑 |
单页应用支持 | 完全支持 SPA(单页应用) | 主要用于多页应用 |
SEO 支持 | 需要配合服务端渲染(SSR)优化 | 默认支持(因为每次跳转都会请求服务器) |
4. 使用场景
Vue Router 跳转适用场景
- 单页应用(SPA) :在前端控制导航,更新视图而不刷新页面。
- 动态组件加载:使用 Vue 的异步组件加载,按需加载页面组件。
- 客户端渲染:所有内容通过前端渲染后显示在页面中。
- 用户体验优先:页面切换速度快,用户不需要等待浏览器刷新。
location.href 跳转适用场景
- 多页应用(MPA) :传统网页中,页面间的跳转需要请求新页面。
- 强制刷新:在某些情况下需要刷新整个页面(如退出登录后重定向到登录页)。
- 与外部链接交互:跳转到非 Vue 管理的页面或外部域名。
5. 总结
- Vue Router 路由跳转 是 SPA 应用的核心工具,适用于需要频繁切换页面但不希望刷新整个页面的场景,用户体验更流畅。
- location.href 跳转 是原生浏览器跳转方式,适用于传统多页应用或者需要强制刷新页面的场景。
在 Vue 项目中,优先使用 Vue Router 来实现页面间的跳转。如果确实需要刷新页面(如退出登录或跳转到外部链接),可以使用 location.href
。