您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Vue中$route和$router的区别是什么
在Vue.js开发中,路由管理是构建单页面应用(SPA)的核心功能。`$route`和`$router`是Vue Router提供的两个重要对象,初学者容易混淆它们的作用。本文将深入解析二者的区别,并通过代码示例帮助开发者正确使用它们。
---
## 一、基础概念
### 1. $router
`$router`是**Vue Router的实例**,全局唯一,提供路由跳转、导航守卫等操作方法。
通过`this.$router`访问,常用方法包括:
- `push()`:导航到新路由(保留历史记录)
- `replace()`:替换当前路由(无历史记录)
- `go()`:前进/后退历史记录
```javascript
// 编程式导航示例
this.$router.push('/home') // 跳转到/home
this.$router.replace('/login') // 替换当前路由
this.$router.go(-1) // 返回上一页
$route
是当前激活的路由信息对象,包含路径、参数、查询参数等数据。
通过this.$route
访问,常用属性包括:
- path
:当前路径(如/user/1
)
- params
:动态路由参数(如{ id: '1' }
)
- query
:URL查询参数(如?name=vue
)
- meta
:路由元信息
// 获取路由参数示例
const userId = this.$route.params.id
const searchQuery = this.$route.query.q
特性 | $router |
$route |
---|---|---|
类型 | 路由实例(对象) | 路由信息(对象) |
作用 | 控制路由跳转 | 获取当前路由状态 |
数据 | 提供操作方法 | 提供只读属性 |
是否可变 | 方法可多次调用 | 属性随路由变化自动更新 |
典型场景 | 编程式导航、全局导航守卫 | 获取参数、根据路由渲染不同内容 |
// 带参数跳转
this.$router.push({
path: '/user',
query: { page: 2 }
})
// 命名路由+params
this.$router.push({
name: 'user',
params: { id: 123 }
})
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth) {
next('/login')
} else {
next()
}
})
<template>
<div>用户ID: {{ $route.params.id }}</div>
</template>
<script>
export default {
watch: {
'$route'(to, from) {
// 响应路由变化
}
}
}
</script>
created() {
if (this.$route.query.ref === 'wechat') {
this.trackSource('wechat')
}
}
$route
是只读的,直接修改参数无效。正确做法是通过$router.push
更新路由:
// 错误做法
this.$route.params.id = 456 // 无效!
// 正确做法
this.$router.push({ params: { id: 456 } })
Vue模板中可直接使用$route
和$router
:
<button @click="$router.back()">返回</button>
<p>当前路径: {{ $route.path }}</p>
两种方式:
1. 使用watch监听$route
watch: {
'$route'(to, from) {
console.log('路由变化', to.path)
}
}
beforeRouteUpdate
明确分工:
$router
$route
避免直接修改:
$route
的属性组件解耦:
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User, props: true }
]
})
TypeScript支持: “`typescript import { Route, VueRouter } from ‘vue-router’
@Component export default class User extends Vue { @Prop() readonly id!: string
get route(): Route {
return this.$route
}
}
---
## 总结
`$router`和`$route`是Vue Router生态中互补的两个核心对象:
- **`$router`** 是"指挥官",负责路由的跳转控制
- **`$route`** 是"情报员",提供当前路由的详细信息
理解它们的区别能帮助开发者更高效地实现路由管理,避免常见的误用问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。