Vue —— 进阶 vue-router 路由(三)(全局路由守卫)

简介: Vue —— 进阶 vue-router 路由(三)(全局路由守卫)

路由守卫

1. 分类
  1. 全局守卫
  2. 独享守卫
  3. 组件内守卫

一、全局路由守卫

1. 作用
  1. 全局路由守卫分为 全局_前置路由守卫 和 全局_后置路由守卫。
  2. 对路由进行权限控制。
2. 基本代码

全局前置路由守卫:初始化的时候被调用、每次路由切换之前被调用。

  router.beforeEach((to, from, next) => {
    console.log('前置路由守卫', to, from);
    if (to.meta.isAuth) { //判断当前路由是否需要进行权限控制
        if (localStorage.getItem('school') === 'shandong') { //控制权限的具体规则
          next() //放行
        } else {
          alert('学校名不对,无权限查看!')
        }
    } else {
      next() //放行
    }
  })

全局后置路由守卫:初始化的时候被调用、每次路由切换之后被调用。

  router.afterEach((to, from) => {
    console.log('后置路由守卫', to, from);
    if(to.meta.title) {
    document.title = to.meta.title //修改网页的title
      } else {
    doument.title = 'vue_test'  
    }
  })
3. 实例:路由守卫的拦截
  1. 当条件判断正确的时候(school 为 shandong),才能看到 News 和 Message 的信息。
  2. 利用全局守卫来授权

https://www.bilibili.com/video/BV1sY411u7k4?t=1.0

全局路由守卫

index.js

  1. 给每个路由配置 meta。
  2. 给路由的标题命名:meta: {title: 'xxx'}。
  3. 开启查看权限:meta: {isAuth: true, title: 'xxx'}
  const router = new VueRouter({
    ......
    children: [{
        name: 'xiangqing',
        path: 'detail/:id/:title',
        component: Detail,
        meta: {
          isAuth: true, //开始权限
          title: '详情' //路由标题
        },
        props($route) {
          return {
            id: $route.params.id,
            title: $route.params.title
          }
        } 
     }]
     ......
   })
  // 全局前置路由守卫——初始化的时候被调用、每次路由切换之前被调用
  router.beforeEach((to, from, next) => {
    console.log('前置路由守卫', to, from);
    if (to.meta.isAuth) {
      if (localStorage.getItem('school') === 'shandong') {
        next()
      } else {
        alert('学校名不对,无权限查看!')
      }
    } else {
      next()
    }
  })
  // 全局后置路由守卫——初始化的时候被调用、每次路由切换之后被调用
  router.afterEach((to, from) => {
    console.log('后置路由守卫', to, from);
    document.title = to.meta.title || '初始页'
  })
  export default router

二、独享路由守卫

1. 作用

只对当前路由进行权限控制

2. 实例:独享守卫的拦截

https://www.bilibili.com/video/BV1uT4y1B7an?t=1.1

独享路由守卫

  1. 只对 News 这一个路由组件进行权限控制。
  2. 独享守卫可以与全局守卫一起使用。
  ......
  name: 'xinwen',
  path: 'news',
  component: News,
  meta: {
      isAuth: true,
      title: '新闻'
  },
  beforeEnter: (to, from, next) => {
      console.log('独享路由守卫', to, from);
      if (to.meta.isAuth) {
        if (localStorage.getItem('school') === 'shandong') {
          next()
        } else {
          alert('学校名不对,无权限查看!')
        }
      } else {
        next()
      }
    }
    ......
    router.afterEach((to, from) => {
      document.title = to.meta.title || '初始页'
      console.log('后置路由守卫', to, from);
  })

三、组件内路由守卫

1. 两个守卫
  1. 进入守卫:通过路由规则,进入该组件时被调用。
  2. 离开守卫:通过路由规则,离开该组件时被调用。
2. 基本语法
    //进入守卫
    beforeRouteEnter(to, from, next) {...}
    //离开守卫
    beforeRouteLeave(to, from, next) {...}
3. 实例:组件内的守卫

https://www.bilibili.com/video/BV1BY4y1B7Sh?t=0.7

组件内守卫

About.vue

  1. 组件内的守卫也可以和其他守卫一起使用。
  <template>
    <h2>我是About的内容</h2>
  </template>
  <script>
  export default {
    name: "myAbout",
    // 通过路由规则,进入该组件时被调用
    beforeRouteEnter(to, from, next) {
      console.log("About——beforeRouteEnter", to, from);
      if (to.meta.isAuth) {
        if (localStorage.getItem("school") === "shandong") {
          next();
        } else {
          alert("学校名不对,无权限查看!");
        }
      } else {
        next();
      }
    },
    // 通过路由规则,离开该组件时被调用
    beforeRouteLeave (to, from, next) {
      console.log("About——beforeRouteLeave", to, from);
      next()
    }
  };
  </script>

不积跬步无以至千里 不积小流无以成江海

相关文章
|
3天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
34 1
|
14天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
JavaScript Go
|
JavaScript C语言 Go
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
45 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
32 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
39 1
vue学习第四章
|
2月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
30 1
vue学习第7章(循环)