You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constrouter=newVueRouter({ ... })// to from 都是路由对象,next()允许跳转 ,next(false)阻止跳转router.beforeEach((to,from,next)=>{// ...if(...){next()}else{next(false)}})// 没有nextrouter.afterEach((to,from)=>{// ...})
1. 开始
通过
<router-link>
导航,默认渲染为a标签,但不会像a标签那样点几次就跳转几次,如果是同一页面,则不进行跳转。通过
tag
特性可以修改默认渲染的标签。如果路由匹配,则会自动添加类名
.router-link-active
(注意/about
会匹配到/
)。如果路由被选中,则会自动添加类名.router-link-exact-active
。类名可配置。路由出口
<router-view>
,匹配到的组件都会渲染到这里。引入vue和vue-router,通过Vue.use使用vue-router,创建router实例并注入。
之后,在任何组件内部即可使用 $router访问router实例,使用 $route访问当前路由。
默认路由方式为Hash路由,可在路由配置中通过mode改成history
2. 动态路由
动态路径参数: 一个路径参数用冒号
:
标记当匹配到一个路由时,参数值会设置到
$route.params
里。例如/user/123/post/456
,$route.params = { id: 123, post_id: 456 }
path匹配使用的是path-to-regexp引擎
组件复用: 当从
/user/123
跳转到/user/321
时,User
组件会被复用,所以组件的生命周期钩子不会再被调用。但是每次路由更新,$route都是一个新的对象,所以可以侦听$route来探测路由变化。
3. 嵌套路由
在路由组件中同样可以使用
<router-view>
先渲染子路由。有时在
to
里直接写路径不方便,此时可以给使用命名路由,配置路由的时候给一个name
,之后给to
传如一个配置对象即可。配置routes时,children跟routes同样是个数组,用来配置子路由。path默认在父级路由的路径下,如果以
/
开头则在根目录下。4. 命名视图
有时候想要一个页面用多个视图
<router-view>
,于是可以给它个name
,并在配置路由的时候,使用components
替换component
来设置多个组件5. 编程式导航
除了使用声明式的
<router-link>
来定义导航,还可以利用router实例方法来实现。$router.push(location, onComplete?, onAbort?)
等同于
<router-link :to="location">
,同样可以传一个路由字符串或者配置对象。$router.replace(location, onComplete?, onAbort?)
$router.go(n)
向前或者向后多少步这些方法都是效仿
window.history
API的。6. 利用prop给路由组件传参
在组件中使用
$route
会使得路由与该组件高度耦合,限制灵活性。在配置路由时,设置props属性为true,则
route.params
将会被设置为组件属性。props
也可以是一个对象,对象键值将原样传给组件属性。props
也可以是一个函数,函数参数是目标路由,需要返回props作为组件属性。7. 导航守卫
全局守卫: beforeEach、afterEach
路由独享守卫: beforeEnter
组件内守卫: beforeRouterEnter、beforeRouterUpdate、beforeRouterLeave
8. 路由元信息
定义路由时可配置
meta
字段。routes
配置中每个路由对象称为路由记录。当一个路由匹配成功时,它和它的子路由记录都会暴露在$route
对象的$route.matched
数组中。因此,在有meta字段的路由中或者其所有子路由中可以遍历
$route.matched
来找到记录中的meta字段。The text was updated successfully, but these errors were encountered: