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.hqwc.cn/news/60634.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Apollo】Apollo-ros版本架构学习与源码分析

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Apollo-ros版本架构学习与源码分析。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&a…

django实现登录和登录的鉴权

1、创建数据库的管理员表 在models.py 中定义admin表,为了简单,表里只有用户名和密码还有默认加的id 三个字段 from django.db import models# Create your models here.class Admin(models.Model):username models.CharField(verbose_name"用户…

勘探开发人工智能技术:机器学习(4)

0 提纲 5.1 半监督学习 5.2 主动学习 5.3 代价敏感学习 5.4 多标签学习 5.5 多示例学习 1 半监督学习 用无标签的数据提升学习器的效果. 1.1 基本概念 半监督学习强调的是一种学习场景, 在该场景下, 无标签数据可以协助带标签数据提升预测质量. 监督学习: 训练数据都有标签…

【AndroidStudio】新版本Androidstudio logcat过滤设置

新版本的过滤没有以前简洁,但是功能性更全了;老版本的只能过滤一个包名,或一个TAG,或关键字,新版本按需过滤即可,下面说一下过滤的具体使用 1.按包名过滤: //输入package:(输入一个…

如何将Linux上的cpolar内网穿透设置成 - > 开机自启动

如何将Linux上的cpolar内网穿透设置成 - > 开机自启动 文章目录 如何将Linux上的cpolar内网穿透设置成 - > 开机自启动前言一、进入命令行模式二、输入token码三、输入内网穿透命令 前言 我们将cpolar安装到了Ubuntu系统上,并通过web-UI界面对cpolar的功能有…

【福建事业单位-推理判断】02图形推理(数量-空间重构)

【福建事业单位-推理判断】02图形推理(数量-空间重构) 一、数量规律1.1点(交点、切点)点的细化考法总结 1.2线条(线条的数量)线的细化考点一笔画(重点)一笔画的判定 总结 1.3 面面的…

设计方法编写测试用例---思路分析

测一四年我在YX公司带测试团队,一个用例评审的会议上,一不小心超常发挥,结果卡在了一个用例设计方法上,印象非常深刻,当时的业务场景是支付方式的选择和优惠方案。 在后来的工作中,也曾几次遇到需要选择合…

勘探开发人工智能技术:机器学习(3)

0 提纲 4.1 logistic回归 4.2 支持向量机(SVM) 4.3 PCA 1 logistic回归 用超平面分割正负样本, 考虑所有样本导致的损失. 1.1 线性分类器 logistic 回归是使用超平面将空间分开, 一边是正样本, 另一边是负样本. 因此, 它是一个线性分类器. 如图所示, 若干样本由两个特征描…

matplotlib 笔记 plt.grid

用于添加网格线 主要参数 visible 布尔值,True表示画网格 which表示要显示的刻度线类型,可以是 major(主刻度)或 minor(次刻度),或者同时显示(both)alpha 透明度 …

【Git】Git切换地址

如何切换git代码地址? 1、查看当前远程 url git remote -v执行命令后,可以看见当前有2个URL。 远程 URL 在一般情况下有两个,分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…

xxx酒业有限责任公司突发环境事件应急预案WORD

导读:原文《xxx酒业有限责任公司突发环境事件应急预案word》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目 录 1 总则 1.1 编制目的 1.2 编制…

Spring Boot集成EasyPoi实现导入导出操作

文章目录 Spring Boot集成EasyPoi实现导入导出操作0 简要说明1 环境搭建1.1 项目目录1.2 依赖管理2.3 关于swagger处理2.4 关于切面处理耗时1 自定义注解2 定义切面类3 如何使用 2.5 核心导入操作2.6 核心导出操作 2 最佳实线2.1 导入操作1 实体类说明2 业务层3 效果3 控制层 2…