全局钩子(全局路由守卫)

vue中路由守卫(路由钩子,或者 叫做 路由导航守卫)一共有三种,一个全局路由守卫,一个是组件内路由守卫,一个是router独享守卫。

路由钩子,即导航钩子,其实就是路由拦截器,vue-router一共有三类:

  1. 全局钩子:最常用

  2. 路由单独钩子

  3. 组件内钩子

6.4.3.1 全局钩子(全局路由守卫)

所谓全局路由守卫,就是小区大门,整个小区就这一个大门,你想要进入其中任何一个房子,都需要经过这个大门的检查。 全局路由守卫有个两个:一个是全局前置守卫beforeEach(), 一个是全局后置守卫afterEach() 。

在src/router/index.js中使用,代码如下:

// 给路由实例对象添加全局守卫
// 全局前置守卫
router.beforeEach((to,from,next)=>{// 读取数据let token = localStorage.getItem('token');console.log(token);if(token){//如果有token,就允许去访问 对应的组件 next();//放行---页面执行放行操作}else{//如果没有token,就跳转到登录页if(to.path === '/login'){next();}else{next('/login');}}})export default router

每个钩子方法接收三个参数: to: Route : 即将要进入的目标 [路由对象] from: Route : 当前导航正要离开的路由 next: Function : 继续执行函数

  • next():继续执行

  • next(false):中断当前的导航。

  • next(‘/‘) 或 next({ path: ‘/‘ }):跳转新页面,常用于登陆失效跳转登陆

    例如:

    创建 user.vue 用户中心组件,login.vue登录组件。我们 希望 通过通过 登录且 成功登录,去访问用户中心,否则,做路由拦截。

    user.vue

<template><div><h1>用户中心</h1></div>
</template>

login.vue

<template><div class="login"><h1>系统登录</h1><div class="login-box"><div><!-- v-model.trim后面加上.trim是为了去除表单修饰符 -->用户名:<input type="text" v-model.trim="username"></div><div>密&emsp;码:<input type="password" v-model.trim="password"></div><div><button @click="login">登录</button></div></div></div>
</template><script>
export default {name: 'login',data() {return {username:'',password:''};},mounted() {},methods: {login(){let result = this.username && this.password;if(!result){alert('用户名和密码不能为空');return false;}// 如果用户名不是admin,并且密码不是123456// 注意:用户名 和 密码 当其中有一个输入错误的时候,都会有下面这个提示if(this.username !== 'admin' || this.password !== '123456'){alert('用户名或密码错误');return false;}// 在登录的时候 同时 向 本地存储 存一个值,存到token中// 保存数据localStorage.setItem('token',Date.now());// 同上面那个一样,只是形式不同// localStorage.token = Date.now();// 登录成功// $routerthis.$router.push({path:'/user'})}},
};
</script><style lang="scss" scoped>
.login{display: flex;// 主轴垂直flex-direction: column;align-items: center;
}
.login-box div{margin: 10px 0;
}
.login-box input{outline: none;height: 26px;
}
.login-box button{width: 80px;height: 30px;
}
</style>

在路由配置文件中router/index.js 去配置 全局路由守卫(路由拦截):

// 给路由实例对象添加全局守卫
// 全局前置守卫
router.beforeEach((to,from,next)=>{// 读取数据let token = localStorage.getItem('token');console.log(token);if(token){//如果有token,就允许去访问 对应的组件 next();//放行---页面执行放行操作}else{//如果没有token,就跳转到登录页if(to.path === '/login'){next();}else{next('/login');}}
//  console.group('from---');
//   console.log(from);//   console.group('to---');
//   console.log(to);})

路由单独钩子(router独享守卫)

使用:在路由配置中单独加入钩子,在src/router/index.js中使用,代码如下:

创建one.vue组件:

<template><div><h1>我是首页组件中的子组件--one.vue</h1></div>
</template>

在src/router/index.js中, 在one组件中单独加 钩子:

const routes = [// 定向{path:'/home',redirect:'/'},{path: '/',name: 'home',component: HomeView,// 嵌套路由(子路由)children:[{path:'/home/one',component:one,// 路由单独钩子(router独享守卫)beforeEnter:(to,from,next)=>{console.log('进入前执行');next();}}]},

在HomeView.vue组件中,访问子组件:

<template><div class="home"><img alt="Vue logo" src="../assets/logo.png"><router-link to="/home/one">访问one组件</router-link><router-view></router-view></div>
</template><script>export default {name: 'HomeView',components: {}
}
</script>

预览:

路由守卫(全局钩子(全局路由守卫)、路由单独钩子(router独享守卫))相关推荐

  1. Vue 路由导航守卫(全局守卫、路由独享守卫、组件内守卫)详解

    Vue 路由导航守卫(全局守卫.路由独享守卫.组件内守卫)详解: 路由守卫 官方解释 "导航"表示路由正在发生改变.正如其名,vue-router提供的导航守卫主要用来通过跳转或取 ...

  2. Vue中 路由导航守卫(全局守卫、路由独享守卫、组件内守卫)

    Vue 路由导航守卫(全局守卫.路由独享守卫.组件内守卫)详解: 路由守卫 官方解释 "导航"表示路由正在发生改变.正如其名,vue-router提供的导航守卫主要用来通过跳转或取 ...

  3. 路由守卫的几种方法、全局守卫、路由独享守卫、组件内部守卫

    路由独享守卫,守的是path 组件内部守卫,守的是component 全局守卫 // src/router/index.js1.前置钩子router.beforeEach((to, from, nex ...

  4. vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)

    router.js:全局守卫 import {createRouter,createWebHashHistory } from 'vue-router'// 省略了routes 中的路由规则 cons ...

  5. vue路由(十二)路由独享守卫beforeEnter和页面内组件路由守卫:beforeRouteEnter,beforeRouteLeave,beforeUpdate

    1 路由独享守卫,单个路由拦截处理 {path: '/Test',name: 'Test',components: {default: () => import('../views/Test.v ...

  6. vue 路由独享守卫

    想进到'trade'页面 必须从shopcart进来 否则进不去 beforeEnter:(to,from,next)=> {if(from.path == '/shopcart'){next( ...

  7. Vue 路由 导航守卫(全局守卫、路由独享守卫、组件内守卫)

    一.全局守卫 1. router.beforeEach((to,from,next)=>{}) 2. 回调函数中的参数,to:进入到哪个路由去,from:从哪个路由离开,next:函数,决定是否 ...

  8. 全局、独享、局部路由守卫

    一.创建路由 //创建一个路由器,并暴露 export default new VueRouter({routes: [{path: '/about',component: About},{path: ...

  9. 全局路由守卫,独享路由守卫,组件内路由守卫

    路由守卫: 1.作用:对路由进行权限控制 2.分类:全局路由守卫,独享路由守卫,组件内路由守卫 3.全局路由守卫:在router=>index.js const routes =[ {path: ...

  10. vue2进阶篇:vue-router之“使用独享路由守卫”

    文章目录 10.13路由守卫 案例:将案例改为"使用独享路由守卫" 完整代码 本人其他相关文章链接 10.13路由守卫 注意点1: 前置路由守卫或者后置路由守卫中,to指代切换到哪 ...

最新文章

  1. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)
  2. 帮设计师与工程师更好沟通的实用技巧
  3. kerberos的故事2
  4. 【git】----- clone 及上传文件
  5. Windows7修改hosts提示:您没有权限在此位置中保存文件
  6. 机器算法有哪几种 python_8种顶级Python机器学习算法-你必须学习
  7. jqgrid 行选中multiboxonly属性说明
  8. React Native 生成 released apk图片不显示
  9. 使用itertools建立词表
  10. 大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现
  11. 嵌入式Linux系统工程师系列之ARM920T的MMU与Cache
  12. 国内网通、电信代理服务器地址
  13. 关于写作,别那么在意别人的看法,开始干吧
  14. 关于element upload上传时额外参数的问题
  15. 上网日志留存_互联网用户日志留存技术标准
  16. Delphi隐藏/显示Windows桌面上的图标
  17. 打工还是创业?思路决定出路!
  18. 苹果里面有个设置,怎么让siri知道我是Ta的主人
  19. 笑到爆,产品经理VS大堂经理
  20. 数字孪生关键技术标准是什么

热门文章

  1. 详解Java 堆排序
  2. 制作PCB的基本设计流程;
  3. 数组与集合的区别(概况)
  4. 【转载】分析Windows的死亡蓝屏(BSOD)机制
  5. Hexo的Next主题详细配置
  6. 电脑编程软件都有哪些
  7. 计算机电子智能化贰级,电子与智能化工程专业承包资质分为一级、二级
  8. 圣思园的随堂视频发布了
  9. lock 指令前缀与mutex锁
  10. Trance — Aura NFT 合集