博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue导航守卫
阅读量:6876 次
发布时间:2019-06-26

本文共 1981 字,大约阅读时间需要 6 分钟。

导航守卫:

帮助我们解决一些在组件加载之前可以做一些操作,尤其是异步操作,这样可以避免组建加载完毕之后,却没有数据的尴尬。当然,你不应该在组件加载之前做太多的异步操作,这样会导致页面的白屏时间过长,用户体验也很差,所以,须慎用导航守卫。(异步操作是独立于生命周期之外的操作,因此vue并不会乖乖的先执行完beforeCreate周期中的异步操作,验证了信息后再执行下一周期,而是先执行完整个生命周期再执行异步操作,这样的做法会导致,vue实例在渲染dom的时候由于大量数据得不到,渲染出一个很丑的页面)

 

完整的导航解析流程

导航被触发。

在失活的组件里调用离开守卫。
调用全局的 beforeEach 守卫。
在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
在路由配置里调用 beforeEnter。
解析异步路由组件。
在被激活的组件里调用 beforeRouteEnter。
调用全局的 beforeResolve 守卫 (2.5+)。
导航被确认。
调用全局的 afterEach 钩子。
触发 DOM 更新。
用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。

 

导航守卫分为:全局守卫、路由独享的守卫以及组件内的守卫

 vue路由钩子大致可以分为三类:

1、全局钩子,主要包括beforeEach和afterEach

这类钩子主要作用于全局,一般用来判断权限,以及页面丢失时需要执行的操作。

//使用钩子函数对路由进行权限跳转router.beforeEach((to, from, next) => {    const role = localStorage.getItem('ms_username');    if(!role && to.path !== '/login'){        next('/login');    }else if(to.meta.permission){        // 如果是管理员权限则可进入,这里只是简单的模拟管理员权限而已        role === 'admin' ? next() : next('/403');    }else{        // 简单的判断IE10及以下不进入富文本编辑器,该组件不兼容        if(navigator.userAgent.indexOf('MSIE') > -1 && to.path === '/editor'){            Vue.prototype.$alert('vue-quill-editor组件不兼容IE10及以下浏览器,请使用更高版本的浏            览器查看', '浏览器不兼容通知', {
confirmButtonText: '确定' }); }else{ next(); } }})

 2、单个路由里的钩子

主要用于写某个指定路由跳转时需要执行的逻辑

 

{                    path: '/dashboard',                    component: resolve => require(['../components/page/Dashboard.vue'], resolve),                    meta: { title: '系统首页' },                    beforeEnter: (to, from, next) => {                                              },                    beforeLeave: (to, from, next) => {                                            }                },

 3、组件路由

主要包括beforeRouteEnter和beforeRouteUpdate,beforeRouteLeave,这几个钩子都写在组件里面,也可以传递三个参数(to,from,next)

 

$route与$router的区别

$route是"路由信息对象",包括path、params、hash、query,fullPath,matched,name等路由信息参数。

而$router是“路由实例对象”,包括了路由的跳转方法,钩子函数等。

转载于:https://www.cnblogs.com/xiaoan0705/p/10277234.html

你可能感兴趣的文章
Oracle 10g R2 之DataGuard物理standby 配置
查看>>
Oracle备份恢复之Trial Recovery
查看>>
利用shell+短信实现简单mysql双向同步监控
查看>>
solr学习之(十)_solr中自带的例子browse样式的问题
查看>>
存储和备份简介
查看>>
【我眼中的戴尔转型】(五)恩恩怨怨,联想戴尔冤冤相报何时了
查看>>
在DELL服务器上升级ESXI 5.5
查看>>
Windows 10 之高级启动模式
查看>>
自动化运维工具安装部署 chef (十)- first cookbook learn httpd
查看>>
线段树的学习之:如何用线段树计算矩形面积
查看>>
WSUS自动更新之后检查重启状态
查看>>
XenDesktop 5 VS XenDesktop 4-你必须了解的几点
查看>>
linux定时任务Crond语法格式及用法详解04
查看>>
我读过的最好的epoll讲解--转自”知乎“
查看>>
Lync-用户-电话号码-更新
查看>>
UML中组件图
查看>>
linux杂记--nohup cron crontab
查看>>
第一集Linux系统工程师集训之网络部分视频课程
查看>>
【cocos2d-x从c++到js】16:使用cocos2d-console工具转换脚本为字节码
查看>>
Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted
查看>>