大型语言模型中的可解释特征
2026/1/2 0:15:29
Vue 路由(Vue Router) 是 Vue.js 应用的前端导航中枢,它将 URL 与组件动态映射,实现无刷新的单页应用(SPA)。
其核心不仅是“跳转页面”,更是状态管理、权限控制、性能优化、SEO 友好的集成平台。
// router/index.jsconstroutes=[{path:'/',component:Home},{path:'/user/:id',component:User,props:true}]constrouter=createRouter({routes,history:createWebHistory()})routes:路径 → 组件的声明式映射;/user/:id):参数通过this.$route.params.id获取;props: true:将$route.params作为 props 传入组件。<router-view>:$route变化→ 自动切换组件;<router-link>:<a>标签,点击时调用router.push();location.href刷新页面。pushState/replaceState修改 URL;popstate事件监听浏览器前进/后退;🔑核心:URL 是状态的序列化,路由是状态的解码器。
| 模式 | URL 示例 | 原理 | 优缺点 |
|---|---|---|---|
createWebHistory() | https://site.com/user/123 | HTML5 History API | ✅ 美观 ❌ 需服务器配置 fallback |
createWebHashHistory() | https://site.com/#/user/123 | window.location.hash | ✅ 无需服务器配置 ❌ URL 不美观 |
location / { try_files $uri $uri/ /index.html; }index.html;// 路由守卫router.beforeEach((to,from)=>{// 权限验证if(to.meta.requiresAuth&&!isAuthenticated){return'/login';// 重定向}// 加载进度条NProgress.start();})router.afterEach(()=>{NProgress.done();})<script> export default { // 进入组件前 beforeRouteEnter(to, from, next) { // 无法访问 this(组件未创建) next(vm => { // vm = 组件实例 }); }, // 离开组件前 beforeRouteLeave(to, from, next) { if (this.hasUnsavedChanges) { const answer = window.confirm('放弃未保存的更改?'); if (answer) next(); } else { next(); } } } </script>constroutes=[{path:'/admin',component:Admin,beforeEnter:(to,from)=>{// 仅此路由的守卫if(!isAdmin)return'/403';}}]💡守卫执行顺序:
全局 beforeEach → 路由独享 beforeEnter → 组件 beforeRouteEnter → 组件 created → 全局 afterEach
// 静态导入(不推荐)importHomefrom'@/views/Home.vue'// 动态导入(推荐)constHome=()=>import('@/views/Home.vue')// webpackPrefetch: true → 空闲时预加载constProfile=()=>import(/* webpackPrefetch: true */'@/views/Profile.vue')<keep-alive>)<keep-alive include="Home,Profile"> <router-view /> </keep-alive>/user/abc→parseInt($route.params.id)=NaN→ 崩溃;beforeEnter(to,from,next){if(!/^\d+$/.test(to.params.id))returnnext('/404');next();}router.addRoute()在刷新后丢失;| 场景 | 方案 |
|---|---|
| 权限路由 | 全局守卫 + 动态addRoute() |
| 滚动行为 | scrollBehavior配置 |
| SEO | Nuxt.js / SSR |
| 微前端 | 路由命名空间隔离(如/app1/user) |
// router/index.jsconstrouter=createRouter({history:createWebHistory(),routes,scrollBehavior(to,from,savedPosition){if(savedPosition)returnsavedPosition;if(to.hash)return{el:to.hash};return{top:0};}})<router-link>”router.push():this.$router.push('/user/123')// 或useRouter().push('/user/123')// Composition API<router-link>仅用于声明式导航。不要只看“跳转页面”,
而要看“状态如何流动”。
真正的前端架构,
不在“组件多漂亮”,
而在“状态多清晰”。
## 2025-06-26 路由优化 ### 1. 启用懒加载 - [ ] 将所有路由改为 () => import(...) ### 2. 添加全局守卫 - [ ] 实现权限验证 + NProgress ### 3. 配置 scrollBehavior - [ ] 修复页面跳转滚动位置 ### 4. 测试动态参数 - [ ] 验证 /user/abc 返回 404✅完成即构建生产级路由系统。
当你停止把路由当“页面跳转”,
开始用状态思维设计导航,
Vue 应用就从组件集合,
变为可掌控的状态机。
这,才是专业前端工程师的路由观。