1、使用 router-link 组件来导航,通过传入 to
属性指定链接, 默认会被渲染成一个
标签
标签html部分
Go to Foo
Go to Bar
js部分
// 1. 定义(路由)组件
const Foo = { template: 'foo' }
const Bar = { template: 'bar' }
//可以从其他文件 import 进来
const Foo = r => require.ensure([], () => r(require('@/page/Foo.vue')), 'Foo')//@代表src文件夹
// 2. 定义路由
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
routes // (缩写)相当于 routes: routes
})
// 4. 创建和挂载根实例。
const app = new Vue({
router
}).$mount('#app')
当
对应的路由匹配成功,将自动设置 class 属性值 .router-link-active
2、动态路由匹配
例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染
const User = {
template: 'User'
}
const router = new VueRouter({
routes: [
// 动态路径参数 以冒号开头
{ path: '/user/:id', component: User }
]
})
- 当匹配到一个路由时,参数值会被设置到
this.$route.params
我们可以更新 User 的模板,输出当前用户的 ID:
const User = {
template: 'User {{ $route.params.id }}'
}
模式 | 匹配路径 | $route.params |
---|---|---|
/user/:username | /user/evan | { username: 'evan' } |
/user/:username/post/:post_id | /user/evan/post/123 | { username: 'evan', post_id: 123 } |
3、路由信息对象的属性
- $route.path
- 类型:
string
- 字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"。
- 类型:
- $route.params
- 类型:
Object
- 一个 key/value 对象,包含了 动态片段 和 全匹配片段,如果没有路由参数,就是一个空对象。
- 类型:
- $route.query
- 类型:
Object
- 一一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。
- 类型:
- $route.hash
- 类型:
string
- 当前路由的 hash 值 (带 #) ,如果没有 hash 值,则为空字符串。
- 类型:
- $route.fullPath
- 类型:
string
- 完成解析后的 URL,包含查询参数和 hash 的完整路径。
- 类型:
- $route.matched
- 类型:
Array
- 一个数组,包含当前路由的所有嵌套路径片段的 路由记录 。路由记录就是 routes 配置数组中的对象副本(还有在 children 数组)。
- 类型:
const router = new VueRouter({
routes: [
{ path: '/foo', component: Foo,
children: [
{ path: 'bar', component: Bar }
]
}
]
})
当 URL 为 /foo/bar
,$route.matched
将会是一个包含从上到下的所有对象(副本)。
- $route.name
* 当前路由的名称,如果有的话。(查看 命名路由)
4、命名路由
通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候
const router = new VueRouter({
routes: [
{ path: '/', name: 'home', component: Home },
{ path: '/foo', name: 'foo', component: Foo },
{ path: '/user/::userId', name: 'user', component: User }
]
})
要链接到一个命名路由,可以给 router-link 的 to 属性传一个对象:
Named Routes
Current route name: {{ $route.name }}
home
foo
bar
这跟代码调用 router.push() 是一回事:
router.push({ name: 'user', params: { userId: 123 }})
5、路由的跳转总结
*
*
*
*
*
我们可以通过设置router-link中的tag来改变链接的标签
/foo