vue2.0 实现导航守卫(路由守卫)


Posted in Javascript onMay 21, 2018

路由跳转前做一些验证,比如登录验证,是网站中的普遍需求。

对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards)。

导航守卫(navigation-guards)这个名字,听起来怪怪的,但既然官方文档是这样翻译的,就姑且这么叫吧。

贴上文档地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

全局守卫

你可以使用 router.beforeEach 注册一个全局前置守卫:

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
 // ...
})

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

to: Route: 即将要进入的目标 路由对象

from: Route: 当前导航正要离开的路由

next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保要调用 next 方法,否则钩子就不会被 resolved。

下面写一个例子:

列举需要判断登录状态的“路由集合”,当跳转至集合中的路由时,如果“未登录状态”,则跳转到登录页面LoginPage;

当直接进入登录页面LoginPage时,如果“已登录状态”,则跳转到首页HomePage;

import Vue from 'vue';
import Router from 'vue-router';
import LoginPage from '@/pages/login';
import HomePage from '@/pages/home';
import GoodsListPage from '@/pages/good-list';
import GoodsDetailPage from '@/pages/good-detail';
import CartPage from '@/pages/cart';
import ProfilePage from '@/pages/profile';
Vue.use(Router)
const router = new Router({
 routes: [
 {
  path: '/', // 默认进入路由
  redirect: '/home' //重定向
 },
 {
  path: '/login',
  name: 'login',
  component: LoginPage
 },
 {
  path: '/home',
  name: 'home',
  component: HomePage
 },
 {
  path: '/good-list',
  name: 'good-list',
  component: GoodsListPage
 },
 {
  path: '/good-detail',
  name: 'good-detail',
  component: GoodsDetailPage
 },
 {
  path: '/cart',
  name: 'cart',
  component: CartPage
 },
 {
  path: '/profile',
  name: 'profile',
  component: ProfilePage
 },
 {
  path: '**', // 错误路由
  redirect: '/home' //重定向
 },
 ]
});
// 全局路由守卫
router.beforeEach((to, from, next) => {
 console.log('navigation-guards');
 // to: Route: 即将要进入的目标 路由对象
 // from: Route: 当前导航正要离开的路由
 // next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
 const nextRoute = ['home', 'good-list', 'good-detail', 'cart', 'profile'];
 let isLogin = global.isLogin; // 是否登录
 // 未登录状态;当路由到nextRoute指定页时,跳转至login
 if (nextRoute.indexOf(to.name) >= 0) { 
 if (!isLogin) {
  console.log('what fuck');
  router.push({ name: 'login' })
 }
 }
 // 已登录状态;当路由到login时,跳转至home
 if (to.name === 'login') {
 if (isLogin) {
  router.push({ name: 'home' });
 }
 }
 next();
});
export default router;

总结

以上所述是小编给大家介绍的vue2.0 实现导航守卫(路由守卫),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javaScript 关闭浏览器 (不弹出提示框)
Jan 31 Javascript
jquery EasyUI的formatter格式化函数代码
Jan 12 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
Sep 20 jQuery
vue2 前端搜索实现示例
Feb 26 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 Javascript
JavaScript实现简单进度条效果
Mar 25 Javascript
js 获取扫码枪输入数据的方法
Jun 10 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 #Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 #Javascript
Vue中父子组件通讯之todolist组件功能开发
May 21 #Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 #Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 #Javascript
JS实现的文件拖拽上传功能示例
May 21 #Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 #Javascript
You might like
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
微信支付开发交易通知实例
2016/07/12 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
vue2.0 路由不显示router-view的解决方法
2018/03/06 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
Django如何配置mysql数据库
2018/05/04 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
Python中函数参数匹配模型详解
2019/06/09 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
django orm模块中的 is_delete用法
2020/05/20 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
试述DBMS的主要功能
2016/11/13 面试题
巡警年度自我鉴定
2014/02/21 职场文书
绿色出行口号
2014/06/18 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
新闻稿格式范文
2015/07/18 职场文书
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技