vue-03-路由-路由守卫

妖狐艹你老母 2023-07-25 12:52 76阅读 0赞

首先,路由守卫存在三种情况

1、全局守卫 router.beforeEach

在 mian.js 内部添加全局守卫,to 表示去往哪个路由 ,from 表示从哪个路由离开 , next 是一个方法,代表的是是否展示路由页面,如果不使用next方法,那么指定页面无法显示,现在点击弹窗确定之后,页面路由内容才会展示

  1. const router = new VueRouter({ //实例化路由对象,将routes配置的路由放进去
  2. routes, //传递routes路由数组
  3. mode : "history" //干掉浏览器#
  4. })
  5. //全局守卫
  6. router.beforeEach((to, from, next) => {
  7. // to and from are both route objects
  8. alert('还没有登录,请先登录');
  9. next()
  10. })

我们打印 to 这个属性,可以得到下面的返回值,其中 path 代表的值就是 当前点击的路由,也就是我们即将去往的路由地址

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNzkyODAw_size_16_color_FFFFFF_t_70

然后我们在进入页面的时候,先来判断当前进入页面是否为 登录 或 注册 页面,如果是,那就执行 next() 方法,显示当前路由,如果不是两者中的一个,那么则弹窗 请登录,且指定到登录 界面。

也就是说,只有在点击注册 或 登录 界面时,我们才能看到界面,且不会弹窗 ,否则点击其他链接 都会触发弹窗,且直接跳转到指定的登录界面

  1. //全局守卫
  2. router.beforeEach((to, from, next) => {
  3. // to and from are both route objects
  4. // alert('还没有登录,请先登录');
  5. // next()\
  6. // console.log(to)
  7. // console.log(from)
  8. if( to.path == "/login" || to.path == "/register"){
  9. next()
  10. }else{
  11. alert("还未登录,请先登录!")
  12. next("/login") //next 方法,指定跳转的路由
  13. }
  14. })

ps:与此同时:针对全局守卫,还存在一个与之相对的后置钩子,

后置钩子 和 全局守卫其实很类似,但是后置钩子没有 next 方法,只有 to 和 from 两个参数

且 后置钩子是进入页面 之后触发的,而全局守卫则是进入页面之前触发的

  1. //后置钩子
  2. router.afterEach( (to , from) => {
  3. alert('msg');
  4. })

2、路由独享的守卫 beforeEnter

我们之前的全局守卫,是在main.js内部 全局 定义的 路由守卫,现在的是路由独享的守卫,在配置路由时,写在路由参数内部

beforeEnter 也是存在三个参数,和全局守卫类似,next() 方法可以控制路由是否显示,以及显示哪个路由 不写next()、或 next(false) 都是不会跳转路由的,next() 会跳转到点击的路由,next(“/login”) 指定跳转到登录界面

  1. const routes = [ //配置路由
  2. { path: '/', name:"indexLink", component: Home },
  3. { path: '/menu', name:"menuLink", component: Menu },
  4. { path: '/login', name:"loginLink", component: Login },
  5. { path: '/register', name:"registerLink", component: Register },
  6. { path: '/admin', name:"adminLink", component: Admin ,beforeEnter: (to, from, next) => {
  7. alert('非登录状态不能访问此页面!');
  8. // next() //显示当前访问的路由
  9. // next(false) //不显示当前访问的路由
  10. // next("/login") //指定访问的路由
  11. if( to.path == "/login" || to.path == "/register"){
  12. next()
  13. }else{
  14. // alert("还未登录,请先登录!")
  15. next("/login")
  16. }
  17. }},
  18. { path: '/about', name:"aboutLink", redirect: "/about/contact", component: About ,children:[
  19. { path: '/about/contact', name:'contactLink' ,redirect:"/about/contact/phoneLink", component: Contact ,children:[
  20. { path: '/about/contact/phoneLink',name:"phoneLink", component: Phone },
  21. { path: './persionNameLink',name:"persionNameLink", component: PersionName }
  22. ]},
  23. { path: '/delivery', name:'deliveryLink' , component: Delivery },
  24. { path: '/history', name:'historyLink' , component: History },
  25. { path: '/orderingGuide', name:'orderingGuideLink' , component: OrderingGuide },
  26. ]},
  27. { path: '*', redirect: "/menu" },
  28. ]

3、组件内的守卫 beforeRouteEnter

,写在组件内部,在进入组件之前,触发该守卫 ,该组件内守卫 beforeRouteEnter 也存在三个参数 ,作用和其他守卫类似,进入哪个路由 , 离开哪个路由,展示哪个路由

  1. <template>
  2. <h1>ADMIN</h1>
  3. </template>
  4. <script>
  5. export default{
  6. data () {
  7. return {
  8. name : "aolie"
  9. }
  10. },
  11. beforeRouteEnter (to, from, next) {
  12. // 在渲染该组件的对应路由被 confirm 前调用
  13. // 不!能!获取组件实例 `this`
  14. // 因为当守卫执行前,组件实例还没被创建
  15. },
  16. beforeRouteUpdate (to, from, next) {
  17. // 在当前路由改变,但是该组件被复用时调用
  18. // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
  19. // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
  20. // 可以访问组件实例 `this`
  21. },
  22. beforeRouteLeave (to, from, next) {
  23. // 导航离开该组件的对应路由时调用
  24. // 可以访问组件实例 `this`
  25. }
  26. }
  27. </script>

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 大白话vue守卫

    路由守卫,我想大家心里都或多或少有点理解了吧,我简单的理解,就类似道路上的关卡,从哪里来,到哪里去在这个关卡里可以进行限制,官方一点的解释就是进行操作的鉴权,当操作与之条件匹配

    相关 vue --- 导航守卫

    个人理解:路由跳转是一个大的过程,就跟组件的创建一样,不是涉及组件的创建 -- 销毁,那么路由的跳转也同样涉及到这个过程。(对接springmvc里面的拦截器,spring的a

    相关 Vue-router 守卫

    在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录。如果用户已经登录,则顺利进入路由, 否则就进入登录页面。在路由管理页面

    相关 vue 守卫

    在main.js中,通过引入路由文件后,通过该对象使用 相当于路由的生命周期 1、全局前置守卫 (1)router.beforeEa