上一篇咱们学习了vue-router的基础,包括基础标签和基础配置,这一篇文章,咱们将会来学习路由的几个高级特性。让咱们开始吧。html
路由守卫是由多个检测函数和钩子函数组成的一连串的自定义逻辑。vue
全局守卫设置:vue-router
咱们来看一段代码:数组
import Vue from 'vue'
import Router from 'vue-router'
import router from './router'
Vue.use(Router)
const route = new Router({
...router
})
const logging = false;
route.beforeEach((to, from, next) => {
if( to.name !== "logging" ){
if( !logging ) next( { name: 'logging' } )
else next();
}
else {
if( logging ) next( { name: 'home' } )
else next();
}
})
export default route
复制代码
这是一段设置登录过滤的代码,只是简单的模拟一下。当没有登录的时候将会跳转到名称为logging的界面,当登录了以后若是是须要跳转登录界面则转换当前跳转路径到home页面,不然则直接跳转。bash
代码伺候:dom
route.afterEach((to, from) => {
console.log(to);
console.log(from);
console.log(arguments);
console.log("afterEach");
})
复制代码
路由守卫设置:异步
代码伺候:函数
routes: [
{
path: '/',
name: 'home',
component: Home,
beforeEnter: (to, from, next) => {
console.log('this is beforeEnter');
next();
}
}
]
复制代码
组件守卫设置:学习
咱们来看一段代码:动画
beforeRouteEnter(to, from, next){
console.log('this is before route enter');
next(vm => {
console.log(vm); //vm就是当前组件的实例
});
},
复制代码
beforeRouteUpdate(to, from, next):这一守卫是当路由发生变化,组件被复用的时候调用的。因此咱们能够知道,首次进入组建的时候是不会调用这一守卫的,只有当复用发生的时候才会调用。同时这一函数之中能够调用this,由于当前组件对象已经被渲染了。
beforeRouteLeave(to, from, next):这一守卫会在当前组件即将离开的时候进行调用,咱们经常在页面离开的时候得到一些是否要离开当前界面的确认框,就能够经过这一守卫进行实现。同时这一守卫之中也是能够调用this的。
咱们综合上面三个守卫来一段代码:
beforeRouteEnter(to, from, next){
console.log('this is before route enter');
next(vm => {
console.log(vm);
});
},
beforeRouteUpdate(to, from, next){
console.log('this is before route update');
next();
},
beforeRouteLeave(to, from, next){
var confirm = confirm("是否离开当前页面?");
if(confirm){
console.log('this is before route Leave');
next();
}
else {
next(false);
}
}
复制代码
最后咱们来总结一下守卫的调用过程吧。
经过使用< transition >标签来进行动效,基础篇咱们有说过router-view这个功能标签是可使用动效标签包裹,而且可使用keep-alive标签的,这里咱们来尝试一个简单的动效吧。 上代码:
html代码:
<transition-group name="change">
<router-view key="default"/>
<router-view key="child2" name="child2"/>
</transition-group>
style代码:
.change-enter{
opacity: 0
}
.change-enter-active{
transition: opacity 1s ease;
}
.change-enter-to{
opacity: 1;
}
.change-leave{
opacity: 1
}
.change-leave-active{
transition: opacity 1s ease;
}
.change-leave-to{
opacity: 0;
}
复制代码
这样咱们就简单实现了一个隐出隐现的效果。
本文主要是说明了路由守卫的功能和使用,同时捎带说起了过分动画内容。路由的所有概念和用法能够说就此所有说起完毕。以后关于vue-router的内容只剩下源码阅读,和一些开发时候的问题总结,我会努力持续更新,但愿看官们能满意。有什么错误的地方也请帮忙告知,我也会即便修改过来的。欢迎你们一块儿学习讨论