匹配优先级按路由定义顺序
路由导航
- router.push(location, onComplete?, onAbort?)
想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。 - 当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)。
声明式 | 编程式 |
---|---|
<router-link :to="..."> | router.push(...) |
// 字符串
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path:
const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user
动态路由
- 如每个ID对应的页面都是user页面,则可使用动态路由配置
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/core/pages/home'
Vue.use(Router)
var person = {
template: '<div>Person</div>'
}
export default new Router({
routes: [
{
path: '/person/:id', component: person
},
]
})
$route.params
- 当使用冒号 : 标记时,参数值会被设置到 this.$route.params,可以在每个组件内使用。如下输出当前用户的 ID:
var person = {
template: '<div>Person {{ $route.params.id }} </div>'
}
模式 | 路径 | $route.params |
---|---|---|
/person/:name | /person/test | { name: 'test' } |
/person/:name/:age | /person/test/20 | { name: 'test', age: 20 } |
$route.path
- 类型: string
字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"。
$route.query
- 类型: Object
一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。
嵌套路由
export default new Router({
routes: [
{
path: '',
meta: {title: '首页', auth: '首页'},
component: Home,
children: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/home',
name: 'Home',
component: Home
},
]
}
]
})
此时访问 http://localhost:8080/#/home 和 http://localhost:8080/#/所展示的页面相同
网友评论