当前位置: 首页 > news >正文

Vue2 第二十节 vue-router (四)

1.全局前置路由和后置路由

2.独享路由守卫

3.组件内路由守卫

4.路由器的两种工作模式

路由

作用:对路由进行权限控制

分类:全局守卫,独享守卫,组件内守卫

一.全局前置路由和后置路由

① 前置路由守卫:每次路由切换之前被调用或者初始化的时候被调用

 next() : 继续执行

router.beforeEach((to, from, next) => {console.log('前置路由守卫', to, from, next)if (to.meta.isAuth) {if (localStorage.getItem('school') === 'atguigu') {next()} else {alert('学校名错误')}} else {next()}
})

meta是路由元信息,是路由器提供给我们放数据的一个容器

 ② 后置路由守卫: 每次路由切换之后被调用或者初始化的时候被调用

router.afterEach((to, from) => {document.title = to.meta.title || "硅谷系统"console.log('后置路由守卫', to, from)
})

 代码汇总

// 该文件专门用于创建整个应用的路由器
import VueRouter from "vue-router"
import About from '../pages/About'
import Home from '../pages/Home'
import News from '../pages/News'
import Message from '../pages/Message'
import Detail from '../pages/Detail'
const router = new VueRouter({routes: [{name: 'guanyu',path: '/about',component: About,meta: { title: '关于' }// 是否授权},{name: 'zhuye',path: '/home',component: Home,meta: { title: '主页' },children: [{// 不要加/name: 'xinwen',path: 'news',component: News,meta: { isAuth: true, title: '新闻' }},{// 不要加/name: 'xiaoxi',path: 'message',component: Message,meta: { isAuth: true, title: '消息' },children: [{name: 'xiangqing',path: 'detail', // 使用占位符声明并接收component: Detail,meta: { isAuth: true, title: '详情' },// 第一种写法:值为对象,该对象中的所有key-value都会以props形式传给Detail组件// 数据是写死的// props: { a: 1, b: 'hello' }// 第二种写法:值为bool值,如果bool值为真,就会把该路由组件收到的所有params参数,以props的形式// 传给Detail组件// props: true// 第三种写法,值为函数props ($route) {return {id: $route.query.id,title: $route.query.title}}}]}]}]
})
// 全局前置路由守卫 --每次路由切换之前被调用或者初始化的时候被调用
router.beforeEach((to, from, next) => {console.log('前置路由守卫', to, from, next)if (to.meta.isAuth) {if (localStorage.getItem('school') === 'atguigu') {next()} else {alert('学校名错误')}} else {next()}
})
// 全局后置路由守卫 --每次路由切换之后被调用或者初始化的时候被调用
router.afterEach((to, from) => {document.title = to.meta.title || "硅谷系统"console.log('后置路由守卫', to, from)
})
export default router

二.独享路由守卫

独享路由守卫:某个路由独享的,只有前置,没有后置

 三. 组件内路由守卫

 分为进入守卫和离开守卫

进入守卫:通过路由规则,进入该组件时被调用

离开守卫:通过路由规则,离开该组件时被调用

export default {name: 'About',// 组件内守卫(进入守卫) 通过路由规则,进入该组件时被调用beforeRouteEnter (to, from, next) {console.log('beforeRouteEnter', to, from, next)if (to.meta.isAuth) {if (localStorage.getItem('school') === 'atguigu') {next()} else {alert('学校名错误')}} else {next()}},// 离开守卫:通过路由规则,离开该组件时被调用beforeRouteLeave (to, from, next) {console.log('beforeRouteLeave')next()}
}

四.路由器的两种工作模式

① 对于url来说,#及其后面的内容就是hash值,hash值不会包含在HTTP请求中,hash值不会带给服务器

②  两种工作模式

(1)history

  • 地址干净,美观,路径中没有#
  • 兼容性和hash模式相比较差
  • 应用部署上线的时候需要后端人员支持,解决刷新页面服务端404的问题

(2)hash:

  • 路径中有#,不美观
  • 若以后地址通过第三方手机app分享,若app校验严格,地址会标记为不合法
  • 兼容性比较好

③ 使用mode配置项进行配置

http://www.lryc.cn/news/112371.html

相关文章:

  • 第三章 图论 No.1单源最短路及其综合应用
  • ❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件
  • 关于Godot游戏引擎制作流水灯
  • C语言 函数指针详解
  • LNMP及论坛搭建
  • 【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)
  • Godot 4 练习 - 制作粒子
  • Java基础继承详解
  • 如何维护你的电脑:打造IT人的重要武器
  • 【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 3
  • Elasticsearch 快照和恢复
  • Packet Tracer - 检验 IPv4 和 IPv6 编址
  • PHP8的表达式-PHP8知识详解
  • 亚马逊云科技七项生成式AI新产品生成式AI,为用户解决数据滞后等难题
  • 图片等比例显示全部,兼容不同宽高比例图片
  • ·[K8S:使用calico网络插件]:解决集群节点NotReady问题
  • 泊松损坏图像的快速尺度间小波去噪研究(Matlab代码实现)
  • 服务器端开发-golang dlv 远程调试
  • STM32F103——时钟配置
  • 【Linux】信号捕捉
  • 超详情的开源知识库管理系统- mm-wiki的安装和使用
  • 安卓:UDP通信
  • clickhouse安装
  • Cpp学习——string(2)
  • python进阶编程
  • 算法练习--leetcode 链表
  • Android性能优化—Apk瘦身优化
  • 前端主题切换方案——CSS变量
  • Java8 list多属性去重
  • kafka-保证数据不重复-生产者开启幂等性和事务的作用?