Open LastPoem opened 5 years ago
关于导航守卫的补充: to:即将进入的路由对象。 from:即将离开的路由对象。 meta:(元数据,描述数据的数据)
前置守卫必须要主动调用next()方法(因为已经跳转过了) 后置钩子就不必要 router.afterEach((to, from)=>{ next(false) //中断当前导航 }) 以上的守卫和钩子称为全局守卫
路由独享守卫:在路由配置上直接用beforeEnter。和全局前置守卫一样的用法 beforeEnter: (to, from, next)=>{ next() //也要必须使用next }
组件内守卫: 在组件内可以直接使用以下: beforeRouteEnter beforeRouteUpdate beforeRouteLeave
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当守卫执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
}
beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。
keep-alive和它的两个钩子函数。
keep-alive: 当组件内还包含组件,然后返回的时候会重新创建内部组件。即无法保存内部组件的状态。 router-view也是一个组件,如果直接被包在keep-alive里面所有路径匹配到的视图组件都会被缓存。
keep-alive也是Vue的一个组件,可以使被包含的组件保留状态,或防止被重新渲染。
利用meta属性 在每个路径中设置meta
{
path:'/',
name:'home',
components:Home,
meta:{
keepAlive:true // 需要被缓存的组件,不需要就用false
},
Vue路由作用: 路由用于设定访问路径,把路径和组件映射起来。 因为在vue单页面应用中,一个页面实际上就是一个组件。
1.基本使用 使用router-link to类似于a标签(本身就被渲染成a标签),to属性是要跳转的组件。跳转的组件渲染到 上。其它内容不变。
router-view是组件渲染的地方。
2.路由默认值 在router配置中,使用重定向改变默认
3.去除路径中#的方法: 在router配置中加入:
mode: "history"
4.router-link其他属性: tag属性:可以指定把渲染成什么标签。
比如渲染成button标签:
tag = "button"
replace属性:直接添加replace,就没有historystate历史记录
active-class: 当router-link 对应的路由匹配成功时,会自动给当前元素设置一个 router-link-active的class。 active-class可以改变默认的名称。也可以在路由配置里用LinkActiveClass设置。
5.编程式路由: 通过代码跳转路由this.$router.push("/路径") 或者this.$router.replace
6.动态路由 在某些情况下,要跳转的页面不确定,此时需要动态路由。 比如: /user/zhangsan 或者 /user/lisi
实现动态路由: 首先在路由配置里: { path: '/user/:id', component: User } 然后在router-link里绑定to属性,并在user/后来一个变量以实现动态路由
可以用this.$route.params.id 来访问路径所配置的id 注意router和route。
7.路由嵌套 比如在/home路径下同时又有home/news和home/message这两个路径。它们是home的子路径。 在路由配置中, children里的path不能有/
注意:嵌套路由中也有默认路径。在嵌套的组件中也要用router-view作为容器显示组件。
8.路由传递参数 传递参数有两种类型: params 和 query.
params的类型: /router:id 传递方式:在path后加上对应的值。比如 /router/zhangsanID. (动态路由就使用params.) 然后再组件中通过this.$route.params.id来访问
query的类型:/router 传递方式:对象中使用query的key作为传递方式、 传递后的路径:/router?id=zhangsanID 具体操作: 在router-link 中绑定to属性,