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

Vue中的路由细节

概念:

关键点在于不刷新界面通过URL变化展示不同组件

实现方式:

Hash模式:URL 中带有 #(如 http://example.com/#/home),# 后的内容作为路由标识,不会发送到服务器
History模式:使用 HTML5 的 history API(pushState/replaceState),URL 无 #(如 http://example.com/home),但需要服务器配置支持

工作原理:

Hash 模式:监听 hashchange 事件,捕获 # 后内容的变化
History 模式:监听 popstate 事件(处理浏览器前进 / 后退),通过 history.pushState 手动修改 URL

核心:

维护一个路由规则表(路由到组件的映射),当 URL 变化时,查找匹配的规则,根据匹配结果,在页面的占位符(如 < router-view >)中渲染对应的组件

现在完成一个简单配置

注意区分routes和router

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'const routes = [{path: '/',        // 路径name: 'Home',     // 路由名称(可选)component: Home   // 对应组件},{path: '/about',name: 'About',component: About}
]const router = createRouter({history: createWebHistory(), // History 模式// history: createWebHashHistory(), // Hash 模式routes//对应上面的routes})export default router

配置完成以后进行路由的跳转

模板中使用声明式跳转

<!-- 普通跳转 -->
<router-link to="/">首页</router-link>
<router-link :to="{ name: 'About' }">关于页</router-link><!-- 带参数 -->
<router-link :to="{ path: '/user', query: { id: 1 } }">用户页</router-link>

JS中使用编程式跳转

import { useRouter } from 'vue-router'
const router = useRouter()// 基本跳转
router.push('/about')
router.push({ name: 'About' })// 带参数
router.push({ path: '/user', params: { id: 1 } }) // params 需配合 name 使用
router.push({ path: '/user', query: { id: 1 } })  // query 会显示在 URL 上// 替换当前历史记录(无回退)
router.replace('/about')

如果我们想要实现局部不刷新的替换

比如说导航栏固定内容区变化
这就是嵌套路由(子路由)

// 配置
{path: '/dashboard',component: Dashboard,children: [{ path: 'profile', component: Profile }, // 子路径:/dashboard/profile{ path: 'settings', component: Settings } // 子路径:/dashboard/settings]
}

模板中需在父组件添加 < router-view > 作为子组件的占位符

当我们需要控制路由跳转权限时需要用到路由守卫

  • 全局守卫(影响所有路由):

    // 跳转前触发
    router.beforeEach((to, from, next) => {// to: 目标路由,from: 来源路由if (to.path === '/admin' && !isLogin) {next('/login') // 未登录则跳转到登录页} else {next() // 允许跳转}
    })
    
  • 组件内守卫(仅影响当前组件):

    export default {beforeRouteEnter(to, from, next) {// 进入组件前调用(此时组件实例未创建)},beforeRouteLeave(to, from, next) {// 离开组件时调用(可用于确认弹窗)if (confirm('确定离开吗?')) {next()}}
    }
    
6. 路由懒加载

优化首屏加载速度,按需加载组件:

const routes = [{path: '/about',component: () => import('../views/About.vue') // 懒加载}
]

四、History 模式的服务器配置

History 模式下,直接刷新页面会向服务器请求该 URL,需服务器配置将所有请求转发到 index.html

  • Nginx 配置
    location / {try_files $uri $uri/ /index.html;
    }
    
  • Apache 配置
    .htaccess 中添加:
    FallbackResource /index.html
    

前端路由 vs 后端路由

类型工作原理场景
前端路由客户端通过 JS 匹配 URL 并渲染组件单页应用(SPA)
后端路由服务器根据 URL 返回对应的 HTML 页面多页应用(MPA)
http://www.dtcms.com/a/397971.html

相关文章:

  • 高防 IP 是如何帮助数藏行业防刷
  • 将深度学习与Spring Boot集成:使用DL4J构建企业级AI应用的完整指南
  • 《UE5_C++多人TPS完整教程》学习笔记57 ——《P59 脚步声与跳跃声(Footstep And Jump Sounds)》
  • 【Qt】常用控件2——按钮类控件
  • 编程与数学 03-009 Linux 操作系统应用 19_Linux 系统性能监控
  • MQTT通信实现方案(Spring Boot 3 集成MQTT)
  • 做网站客户需求网站建设与运行的盈利收入
  • Sass:CSS 预处理器
  • CSS元素的总宽度计算规则
  • WPS表格和Excel中快速选择有批注的全部单元格
  • 108. 将有序数组转换为二叉搜索树【 力扣(LeetCode) 】
  • 构建你的 MCP 能力层:.NET 9 + SK 的系统方案
  • 好网站分享建设一个网站的具体流程
  • 缓存优化技术指南:让数据访问快如闪电
  • 算法相关问题记录
  • DV OV EV SSL证书验证级别
  • 中山做网站哪家公司好网页设计模板html图片
  • AI赋能 破局重生 嬗变图强 | 安贝斯受邀参加2025第三届智能物联网与安全科技应用大会暨第七届智能化信息化年度峰会
  • ASP.NET 学习总结
  • 基于ASP.NET+SQL Server简单的 MVC 电商网站
  • 开源生态与技术民主化 - 从LLaMA到DeepSeek的开源革命(LLaMA、DeepSeek-V3、Mistral 7B)
  • 电路方案分析(二十三)Hi-Fi耳机放大器电源参考设计
  • 快速识别可访问端口号:Python 实现端口扫描
  • 【汽车篇】AI深度学习在汽车激光焊接外观检测的应用
  • 广州专业建站旅游景区网站建设规划
  • 【第30话:路径规划】自动驾驶中Hybrid A星(A*)搜索算法的详细推导及代码示例
  • [算法导论] 正则匹配 . *
  • 电子商务网站开发教程网站源码.net
  • (三)React+.Net+Typescript全栈(动态Router/Redux/RTK Query获取后端数据)
  • elasticsearch的使用、api调用、更新、持久化