vue router 4 的最大区别是设计哲学转向:函数式创建、显式依赖注入、响应式路由对象;弃用类实例与 this.$router,改用 createrouter、userouter、useroute 等组合式 api,深度适配 vue 3 响应式系统与 typescript。

Vue Router 4 与 3 的最大区别,不是某个 API 写法的调整,而是整个设计哲学的转向:它彻底放弃了 Options API 时代的隐式依赖和类实例模式,转为深度适配 Vue 3 的 Composition API 和响应式系统。这种转变带来三个不可逆的核心变化——函数式创建、显式依赖注入、响应式路由对象。
路由创建方式从类构造变为函数工厂
Vue Router 3 使用 new VueRouter({}) 创建实例,需先调用 Vue.use() 全局挂载,耦合 Vue 构造函数;而 Vue Router 4 完全去类化,只提供 createRouter、createWebHistory 等纯函数:
-
createRouter()接收配置对象(含history函数而非字符串mode),返回一个轻量、可 tree-shaking 的路由实例 -
history不再是配置项,而是由createWebHistory()或createWebHashHistory()显式创建的独立对象,便于测试和替换 - 挂载方式统一为
app.use(router),与 Vue 3 插件系统完全一致,无副作用、无全局污染
Composition API 中路由访问必须显式声明
不再有 this.$router 和 this.$route,所有路由能力都通过组合式函数按需引入:
-
useRouter()返回应用级路由器实例,用于push、replace、go等导航操作 -
useRoute()返回一个深度响应式的 ref,其.value包含path、params、query、meta等全部信息 - 模板中仍可直接使用
$router和$route,但逻辑层推荐 setup 内显式调用,保障类型推断和可测试性
导航守卫与响应式监听更自然、更精准
守卫行为从“必须调用 next”变为“返回控制值”,配合响应式路由对象,实现细粒度更新:
- 全局守卫如
beforeEach可直接return '/login'重定向,或return false取消导航,无需next回调 - 组件内守卫升级为独立函数:
onBeforeRouteLeave、onBeforeRouteUpdate,在setup中直接调用,不依赖组件实例 - 监听路由变化时,不再需要
watch($route)整体对象,而是watch(() => route.params.id)或watch(() => route.query.q),避免无效触发
类型支持与逻辑复用能力跃升
Vue Router 4 的 TypeScript 类型定义覆盖全链路,从路由记录 RouteRecordRaw 到 useRoute() 返回值,均支持自动推导;更重要的是,路由逻辑可封装为独立的 Composition Function:
- 例如
useUserRoute()可内部调用useRoute()和useRouter(),封装参数解析、数据加载、权限校验全流程 - 该函数既可在组件
setup中使用,也可在普通工具文件中调用,彻底解耦路由与 UI - 配合
defineAsyncComponent和懒加载,路由配置本身也支持类型安全的动态导入
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











