全局路由拦截、局部路由拦截
创始人
2024-03-03 20:43:03
0

引入: 

看下面这个效果: 

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

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


如何拦截:

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

(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')}}
}

相关内容

热门资讯

快手最新公告:直播功能已逐步恢... 12月23日,快手发布最新公告,公告称,公司快手应用的直播功能于2025年12月22日22:00左右...
原创 《...  鲁网12月23日讯(记者 魏萱)12月22日,烟台市人民政府新闻办公室召开《烟台市海上交通安全条例...
昆明出台条例监管学校食品安全,... 12月23日,澎湃新闻从相关渠道获悉,《昆明市学校食品安全管理条例》(以下简称条例)已审查通过,自2...
广告语被质疑“大字吹牛,小字免... 近日,因一句“10户中国家庭,7户用公牛”的广告语,国内插座行业龙头公牛集团(603195)与竞争对...
最高法院:代理人是承担商业诋毁... 最高法院:代理人是承担商业诋毁责任的主体吗? 代理行为的法律后果由被代理人承担,代理人并非被诉行为实...
一图读懂!一次性信用修复政策→ 来源:中国人民银行 博尔塔拉融媒体中心出品 监审:葛慧慧 编审:刘素针 编辑:邹小梅 责编:邹小梅
原创 诚... 近期,据媒体报道,上海的车主原价30余万元、购买仅2个月的丰田新车在湖南一高速公路被追尾,交警认定后...
人民法院报评论员:大力推动行政... 为进一步发挥典型案例指导引领作用,12月22日,最高人民法院、最高人民检察院从过去一年的全国行政公益...