全局路由拦截、局部路由拦截
创始人
2024-03-03 22:37:51

引入: 

看下面这个效果: 

每次我们在点击一个功能时,它就会跳转到登录页面,意思就是让我们先登录,登录之后再进行功能操作;但是如果我们登录了,它就不会跳转,这是什么原理呢;

运用的原理:在路由跳转之前,进行拦截检查是否登录,此时就用到了:路由拦截 


如何拦截:

  • 路由拦截分为:全局路由拦截、局部路由拦截;

(1)全局路由拦截:

const router = new VueRouter({mode: 'history',routes
})// 全局拦截
router.beforeEach((to, from, next) => {if (需要拦截验证的路由) {if (验证成功) {// next():不拦截,放行next()} else {next('/login')}} else {next()}
})
  • 拦截方法:router.beforeEach(回调函数),每个路由跳之前都会执行这个函数;
  • 回调函数有三个参数:to、from、next,
  • to是跳转后路由,from是跳转前路由,next是个函数;
  • next是一个函数,含义是:不需要拦截的路由通行;
  • 并不需要对所有路由进行拦截,不需要拦截的就next()

拦截思路:(对上述代码进行解释)

路由需要拦截就走外围if,不许要拦截就走外围else,通过next()放行;如果拦截的路由授权通过了,就走next()放行,没有授权通过就跳转到某个页面去执行某个功能,去授权。

拿登录案例来理解:

如果点一个功能需要验证是否注册登录,那就拦截下来;不需要验证那就不拦截就走外层else;里层的判断:拦截下来的路由,判断你是否登录,没登录那就else去登录,if登录了那就走next()放行。

案例演示:

现在要求是要拦截 path为 “/center”和“/order”的路由,其他的不拦截;拦截的路由需要判断是否登录;

(1)外层if判断代码:

  • 首先给要拦截的路由加上 meta 
// 配置表,将路径和组件一一对应配置好
const routes = [{path: '/films',component: FilmsView},{path: '/cinemas',component: CinemasView},{path: '/center',component: CenterView,meta: {isKerwinRequired: true}},{path: '/order',component: OrderView,meta: {isKerwinRequired: true}}
]
  • meta里面名字随便起,传一个true值,默认不写是false; 

此时打印一下 to 的值:

console.log(to)

没加meta之前的结果:

加了meta之后的结果: 

此时需要拦截的路由的meta都是true,那外层的if语句条件不就有了:(这就话的思路就是给需要拦截的加“特殊标记”呗。)

if (to.meta.isKerwinRequired){}

(2)里层if代码: 

现在是拦截好路由了,接下来判断是否登录;

  • 是否登录的条件思路是:看有没有本地存储的登录信息:
if (localStorage.getItem('token'))

最终的完整代码:

// 全局拦截
router.beforeEach((to, from, next) => {if (to.meta.isKerwinRequired) {// 判断 本地存储中是否tokenif (localStorage.getItem('token')) {// next():不拦截,放行next()} else {next('/login')}} else {next()}
})
  • “/login” 路径需要配置 

 

 (2)局部路由拦截:

  • 在需要拦截的路由内部写代码:
{path: '/order',component: OrderView,meta: {isKerwinRequired: true},beforeEnter: (to, from, next) => {if (localStorage.getItem('token')) {// next():不拦截,放行next()} else {next('/login')}}
}

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...