reload vue 重新加载_vue面试,谈下router拦截

最近开始准备面试,尽管是电话面试全身还是充斥着紧张感,一面感觉还不错,主要是问react和vue的一些生命周期,介绍下redux...,二面印象深刻的是问到了介绍下router拦截,我觉得还是个人对router 的理解不够,当下有些不知道该怎么回答,然后就没有回复了,面后去看了下文档,意识到平时在做的项目在登陆前使用的beforeEach其实就是在做拦截功能,转换成自己的思想,还是太弱了,把我看到的我能理解的博主的回答写在这里,做一个记录。

vue中使用router全局守卫实现页面拦截

一、背景
  在vue项目中使用vue-router做页面跳转时,路由的方式有两种,一种是静态路由,另一种是动态路由。而要实现对路由的控制需要使用vuex和router全局守卫进行判断拦截(安全问题文章最后讨论)
二、使用场景
  静态路由的使用场景:在我们使用静态路由实现页面跳转时,不管我们是否登录,当我们在地址栏修改地址后,页面会发生跳转并展示页面内容(数据并不会被展示出来),这样的问题显然是不能够被接受的;
  动态路由的使用场景:动态路由无非就是从后端拿到了数据然后在加到router里面了。假如用户登录了,在地址栏修改地址便能直接访问。所以动态路由并不能起到拦截作用。
三、解决方案
  使用vuex+router.beforeEach()+动态路由实现页面拦截
    页面刷新时会清楚vuex里面的值;(防止直接修改地址栏)
    router.beforeEach()对跳转前进行拦截判断;(对vuex里面的值进行判断)
    当用户登录时请求后台拿到数据,加载路由.(跳转页面)
四、实现过程
  1.首先定义vuex里面的值,需要定义两个值:a.登录状态信息的值 loginInfo b.存储动态路由的值 routerList

ea8e057e04a73785ee2e8606408642dc.png


2.router.beforeEach()对路由跳转前进行控制 

//全局守卫
router.beforeEach((to, from, next)=> {let userId = store.state.loginInfo.id;//这里是对登录后的值进行判断,也可对token的值进行判断
//if ( getToken()){if (userId === '') {if (to.meta.requireAuth || to.name == null) {next({path: '/'})} else {next();}} else {//初始化动态路由方法initRouter(router, store); next();}}
);


3.初始化动态路由
在全局守卫对应条件下加载动态路由数据routerList和在登录成功时存储登录成功的信息loginInfo
新建一个xxx.js文件 引入axios 创建一个函数并使用export 暴露该方法;
请求成功拿到数据后,把数据造成和routes里的数据一样。然后使用 router.addRoutes 添加进去;
index中的默认路由

a378c4326aea26ffa2ecd065ffbe28e6.png

源代码

import axios from 'axios'
export const initRouter = (router,store)=>{if (store.state.routerList.length > 0) {return;}axios.get(' URL').then((rest)=>{let routerList = [];if(rest.data.success){let routers = rest.data.body;routers.forEach(router=>{let {path,component,name,} = routerlet routerObj = {path:path,name:name,component(resolve){if (component.startsWith("index")) {require(['../components/' + component + '.vue'], resolve)}       },meta:{requireAuth:true} //是否是登录权限控制};routerList.push(routerObj);});//add到router中router.addRoutes(routerList); //存储到vuex中store.commit('routerList', routerList); }else{console.log(rest.data.error);}}).catch((error)=>{console.log(error);})
}    


4.登录成功后存储成功状态信息并跳转页面

def94bb6aaab451aef7ebdd8fd30be60.png


至此,页面拦截功能已实现。
五、总结
  该方法实现主要用到了:
  1.vuex及页面刷新时会对vuex进行清空,所以比如退出时要对页面window.location.reload(),其它地方类似。
  2.router.beforeEach()钩子函数及关键的router.addRoutes方法
  3.es6的一些写法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489923.shtml

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

相关文章

文小刚:创新就是孩子的游戏

来源: 返朴 撰文 | 文小刚 (麻省理工学院终身教授、格林讲席教授)1什么是创新应用科学(工程技术)的目的是利用已知的知识,创造社会价值,造福人类。而基础科学的目的是创造新知识,开拓…

bzoj1532: [POI2005]Kos-Dicing

1532: [POI2005]Kos-Dicing Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1520 Solved: 516[Submit][Status][Discuss]Description Dicing 是一个两人玩的游戏,这个游戏在Byteotia非常流行. 甚至人们专门成立了这个游戏的一个俱乐部. 俱乐部的人时常在一起玩这个游戏然后评…

python搭配什么数据库_python 连接操作数据库(一)

一、下面我们所说的就是连接mysql的应用: 1、其实在python中连接操作mysql的模块有多个,在这里我只给大家演示pymysql这一个模块(其实我是感觉它比较好用而已): pymysql是第三方的一个模块,需要我们自己安装…

GE数字化重塑的启示:调整阵型,再战工业互联网!

来源:中国华能(部分内容参考《财经》杂志韩舒淋“从GE数字化业务大调整看工业互联网未来”)打响“工业互联网”第一枪的GE(美国通用电气),曾是全球市值最高的工业巨头,如今市值却缩水至巅峰时期…

python简单图画程序_用Python的Turtple画图形

不知道各位是否还记得在小学或者初中的时候,我们接触过一种语言叫做logo语言,这个语言可以画正方形,画三角形,画圆。而用Python画图形也有点类似logo语言的意思。 在画图之前,我们需要启动一个模块,turtple…

freeRTOS实时操作系统学习笔记

温馨提示:点击图片查看大图更清晰 —————————————————————————————↑↑↑上方资源下载后可获取xmind原文件。 1、freeRTOS移植和配置脑图 2、内核源码学习

通用AI——未来真正强健的人工智能?

来源:王宏琳科学网博客一本新书纽约大学马库斯(Gary Marcus)教授和戴维斯(Ernest Davis)教授2019年新书(参考资料[1])的书名,颇吸引眼球:《Rebooting AI : 构建我们可以信…

python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...

原标题:Python开发桌面软件文档及网址管理工具,强迫症的福音写在前面 这两天用python鼓捣开发了一个软件,分享给同事,觉得很实用,可以大大提高工作效率,想通过平台分享出来给大家 希望给爱好python的童鞋做…

halcon 将数据保存到excel_pandas筛选、合并、批量保存excel数据

人生苦短,我学python!python是目前最流行的编程语言,功能十分强大,在爬虫、数据分析、人工智能方面均得以广泛应用。本专辑主要分享两个数据分析库numpy和pandas在数据分析方面的基础知识和各种技能,pandas的快、准、简…

边缘计算参考架构3.0

来源:萤火虫智能家居沙龙全球已经掀起行业数字化转型的浪潮,数字化是基 础,网络化是支撑,智能化是目标。通过对人、物、环境、过程等对象,进行数字化而产生数据,通过网络化实 现数据的价值流动,…

tensorflow 转张量类型为float_5个简单的步骤掌握Tensorflow的Tensor

在这篇文章中,我们将深入研究Tensorflow Tensor的细节。我们将在以下五个简单步骤中介绍与Tensorflow的Tensor中相关的所有主题:第一步:张量的定义→什么是张量?第二步:创建张量→创建张量对象的函数第三步&#xff1a…

华为手机怎么使用读卡器_华为手机使用小窍门

华为手机电池耐用,信号好,系统流畅,外观也一改以往的呆板现在追求时尚,所以深得国人的喜爱,也因为美国的打压激起了国人的爱国意识,华为在国内手机销量高居第一,使用的人很多。现在国产最好的手…

报告 | 数字孪生城市研究报告(2019年)

来源 :数据观数字孪生技术应用最早起源于工业领域,尤其飞机、火车发动机等高端制造领域,对产品、生产线和工艺等进行数字仿真、实时跟踪,研发周期大幅缩减,生产成本大幅降低,形成多设备互联、协同和优化的建…

win10开始不显示python_win10从零安装配置pytorch全过程图文详解

1.安装anaconda (anaconda内置python在内的许多package,所以不用另外下载python) 可以点击下面的清华开源软件镜像站,在官网下载anaconda不如在这下的快 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 镜像站 我下载的…

暗备用的运行状态_瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】...

《瞧:我利用“无偏二极管”发明设计出了【宇宙“暗物质”、“暗能量”探测器】》楔子:首先,我要在此留下“2020”——“爱你爱你”印迹的一张照片:这不是口罩而是爱!中国人以【爱家人、爱自己】这一特殊形式的“爱”战…

【必读】2019年深度学习自然语言处理最新十大发展趋势, 附报告下载

https://blog.floydhub.com/ten-trends-in-deep-learning-nlp/来源:专知2018年是基于深度学习的自然语言处理(NLP)研究发展快速的一年。在此之前,最引人注目的是Word2Vec,它于2013年首次发布。在此期间,深度学习模型在语言建模领域…

spring 事务隔离级别和传播行为_Spring事务的传播行为案例分析

网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习。1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解2、spring…

Science:睡眠剥夺影响大脑思考竟是因为蛋白质罢工了!

来源:生物探索睡眠会影响我们的思维,当我们获得充足的睡眠后,大脑思维会变得清晰;而当我们睡眠不足时,大脑会变得迟钝。那么进入睡眠状态后,大脑又是如何调整以保证睡醒后脑回路清晰的呢?近日&a…

element ui input视图没刷新_[Selenium自动化测试实战] 如何在UI自动化测试中加入REST API的操作...

问题当我们描述一个“好的自动化测试用例”时,经常出现标准是:精确。自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败。独立。自动化测试用例不应该受测试套件中任何其他测试用例…

语句中如何结束本循环进入下一循环_Python3基础语法(八)--控制循环 while...

一、while 简介Python 的循环有 for 和 while 两种&#xff0c;while 为条件控制循环&#xff0c;通过循环控制条件表达式控制循环结束。流程图如下&#xff1a;Python 中 while 语句的格式如下&#xff1a;while <条件表达式>:【语句块】释&#xff1a;当 while 的 <…