如何在vue2.0中实现导航守卫?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
vue是什么
vue是一套用于构建用户界面的渐进式JavaScript框架,vue与其它大型框架的区别是,使用vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用vue可以采用单文件组件和vue生态系统支持的库开发复杂的单页应用。
导航守卫(navigation-guards)这个名字,听起来怪怪的,但既然官方文档是这样翻译的,就姑且这么叫吧。
贴上文档地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html
<强>全局守卫强>
你可以使用路由器。beforeEach注册一个全局前置守卫:
const router =, new VueRouter ({,,,}) router.beforeEach(下),,,,,=祝辞,{ ,//? })
当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫解决完之前一直处于等待中。
每个守卫方法接收三个参数:
- <李>
:路线:即将要进入的目标路由对象
李> <李>:路线:当前导航正要离开的路由
李> <李>:功能:一定要调用该方法来解决这个钩子。执行效果依赖一方法的调用参数。
李>- <李>
next():进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是证实(确认的)。
李> <李>下(错误):中断当前的导航。如果浏览器的URL改变了(可能是用户手动或者浏览器后退按钮),那么URL地址会重置到从路由对应的地址。
李> <李>下(& # 39;/& # 39;)或者next({路径:& # 39;/& # 39;}):跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。
李> <李>下(错误):(测试盒框+)如果传下的入参数是一个错误实例,则导航会被终止且该错误会被传递给router.onError()注册过的回调。
李>确保要调用一方法,否则钩子就不会被解决。
<强>下面写一个例子:强>
1。列举需要判断登录状态的”路由集合”,当跳转至集合中的路由时,如果”未登录状态”,则跳转到登录页面LoginPage;
2。当直接进入登录页面LoginPage时,如果”已登录状态”,则跳转到首页主页;
import Vue 得到& # 39;vue # 39;; import Router 得到& # 39;vue-router& # 39;; import LoginPage 得到& # 39;@/页面/登录# 39;; import HomePage 得到& # 39;@/页面/回家# 39;; import GoodsListPage 得到& # 39;@/页面/good-list& # 39;; import GoodsDetailPage 得到& # 39;@/页面/good-detail& # 39;; import CartPage 得到& # 39;@/页面/车# 39;; import ProfilePage 得到& # 39;@/页面/概要# 39;; Vue.use(路由器) const router =, new 路由器({ ,路线:[ {才能 ,,,路径:& # 39;/& # 39;,,//,默认进入路由 ,,,重定向:& # 39;/回家# 39;,,//重定向 ,,}, {才能 ,,,路径:& # 39;/登录# 39; ,,,的名字:& # 39;登录# 39; ,,组件:LoginPage ,,}, {才能 ,,,路径:& # 39;/回家# 39; ,,,的名字:& # 39;回家# 39; ,,组件:主页 ,,}, {才能 ,,,路径:& # 39;/good-list& # 39; ,,,的名字:& # 39;good-list& # 39; ,,组件:GoodsListPage ,,}, {才能 ,,,路径:& # 39;/good-detail& # 39; ,,,的名字:& # 39;good-detail& # 39; ,,组件:GoodsDetailPage ,,}, {才能 ,,,路径:& # 39;/车# 39; ,,,的名字:& # 39;车# 39; ,,组件:CartPage ,,}, {才能 ,,,路径:& # 39;/概要# 39; ,,,的名字:& # 39;概要# 39; ,,组件:ProfilePage ,,}, {才能 ,,,路径:& # 39;* * & # 39;,,,//,错误路由 ,,,重定向:& # 39;/回家# 39;,,//重定向 ,,}, ,) });//,全局路由守卫 router.beforeEach(下),,,,,=祝辞,{ ,console.log (& # 39; navigation-guards& # 39;); ,//:,路线:,即将要进入的目标,路由对象 ,//:,路线:,当前导航正要离开的路由 ,//下一个:功能:,一定要调用该方法来,resolve 这个钩子。执行效果依赖,next 方法的调用参数。 ,const nextRoute =,(& # 39;回家# 39;,,& # 39;good-list& # 39;,, & # 39; good-detail& # 39;,, & # 39;车# 39;,,& # 39;概要# 39;]; ,let isLogin =, global.isLogin;,//,是否登录 ,//未登录状态,当路由到nextRoute指定页时,跳转至登录 ,if (nextRoute.indexOf (to.name),祝辞=,0),{, if 才能;(! isLogin), { ,,console.log (& # 39; what 他妈的# 39;); ,,router.push({,名字:& # 39;登录# 39;,}) ,,} ,} ,//已登录状态,当路由到登录时,跳转至home ,if (to.name ===, & # 39;登录# 39;),{ if 才能;(isLogin), { ,,router.push({,名字:& # 39;回家# 39;,}); ,,} ,} 接下来,(); }); export default 路由器;如何在vue2.0中实现导航守卫