记录一下全局路由守卫的使用;

  方法一:定义一个数组用于检测与管理需要登录的页面,全局路由守卫配合本地存储判断是否跳转

import Vue from 'vue'
import Router from 'vue-router'
import store from './../store' import Home from 'components/home/home' // 主页组件 // 其它组件... import Cart from 'components/cart/cart' // 购物车组件
import User from 'components/user/user' // 用户中心组件 // 其他组件... import GoodsDetail from 'components/goods-detail/goods-detail' // 商品详情组件 import { localTake } from 'common/js/localStore' // 本地存储方法封装 Vue.use(Router) const router = new Router({
routes: [
{
path: '/', // 默认地址
redirect: '/home'
},
{
path: '/home',
component: Home,
name: 'Home',
meta: {
title: '主页',
keepAlive: true // 需要被缓存
}
},
{
path: '/cart',
component: Cart,
name: 'Cart',
meta: {
title: '购物车',
keepAlive: true // 需要被缓存
}
},
{
path: '/user',
component: User,
name: 'User',
meta: {
title: '我的',
keepAlive: true // 需要被缓存
}
},
{
path: '/user-login',
component: UserLogIn,
name: 'UserLogIn',
meta: {
title: '登录',
keepAlive: false // 不需要被缓存
}
},
{
path: '/goods-detail',
component: GoodsDetail,
name: 'GoodsDetail',
meta: {
title: '商品详情',
keepAlive: true // 需要被缓存
}
}
],
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return {x: 0, y: 0}
}
}
}) // 全局路由守卫
router.beforeEach((to, from, next) => {
const nextRoute = ['User', 'Cart', 'GoodsDetail'] // 需要登录的页面
let isLogin = localTake('userMsg') // 判断是否登录,本地存储有用户数据则视为已经登录
// 未登录状态;当路由到 nextRoute 指定页时,跳转至 UserLogIn
if (nextRoute.indexOf(to.name) >= 0) { // 检测是否登录的页面
if (!isLogin) { // 如果未登录(本地存储无用户数据),并且要跳到登录页面
if (from.name === 'UserLogIn') {
next('/')
return
}
    // 登录后,跳到到当前页面
router.push({
name: 'UserLogIn',
params: {redirect: to.fullPath}
})
}
}
// 已登录状态;当路由到 UserLogIn 时,跳转至 Home
if (to.name === 'UserLogIn') {
if (isLogin) {
next('/')
return
}
}
next() // 必须使用 next ,执行效果依赖 next 方法的调用参数
}) export default router

  方法二:通过定义to.meta.needLogin(needLogin 为自定义,路由元信息),判断是否需要登录

import Vue from 'vue'
import Router from 'vue-router'
import store from './../store' import Home from 'components/home/home' // 主页组件 // 其它组件... import Cart from 'components/cart/cart' // 购物车组件
import User from 'components/user/user' // 用户中心组件 // 其他组件... import GoodsDetail from 'components/goods-detail/goods-detail' // 商品详情组件 import { localTake } from 'common/js/localStore' // 本地存储方法封装 Vue.use(Router)
const router = new Router({
routes: [
{
path: '/', // 默认地址
redirect: '/home'
},
{
path: '/home',
component: Home,
name: 'Home',
meta: {
title: '主页',
keepAlive: true // 需要被缓存
}
},
{
path: '/cart',
component: Cart,
name: 'Cart',
meta: {
title: '购物车',
keepAlive: true, // 需要被缓存
needLogin: true // 需要登录 
}
},
{
path: '/user',
component: User,
name: 'User',
meta: {
title: '我的',
keepAlive: true, // 需要被缓存
needLogin: true // 需要登录
}
},
{
path: '/user-login',
component: UserLogIn,
name: 'UserLogIn',
meta: {
title: '登录',
keepAlive: false // 不需要被缓存
}
},
{
path: '/goods-detail',
component: GoodsDetail,
name: 'GoodsDetail',
meta: {
title: '商品详情',
keepAlive: true, // 需要被缓存
needLogin: true // 需要登录
}
}
]
})
// 全局路由守卫
router.beforeEach((to, from, next) => {
let isLogin = localTake('userMsg')
if (to.meta.needLogin) { // 判断该路由是否需要登录权限
if (isLogin) { // 判断是否已经登录
next()
}
else {
next({
path: '/login',
query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
})
}
}
else {
next()
}
}) export default router

推荐使用判断路由元信息的方法,代码比较简洁,能更好的维护与管理

Vue router 全局路由守卫的更多相关文章

  1. vue全局路由守卫beforeEach+token验证+node

    在后端安装jsonwebtoken         npm i jsonwebtoken --save 在 login.js文件中引入      // 引入jwtconst jwt = require ...

  2. Vue router 一个路由对应多个视图

    使用命名路由 https://jsfiddle.net/posva/6du90epg/ <script src="https://unpkg.com/vue/dist/vue.js&q ...

  3. Vue 中的Vue Router一级路由,二级路由,三级路由以及跳转

    今天编写了一下Vue中的路由 先用命令行新建一个空的项目,并且我知道要用路由,就下载了路由的相关依赖 vue init webpack demo5 完毕之后进入所在的项目 cd demo5 之后用vs ...

  4. vue全局路由守卫beforeEach

    在main.js里使用方法 router.beforeEach((to,from,next)=>{}) to,是将要跳转的路由, from,是离开的路由 next是个方法,判断to.path 或 ...

  5. 5分钟学会vue中的路由守卫(导航守卫)

    在项目开发中每一次路由的切换或者页面的刷新都需要判断用户是否已经登录,前端可以判断,后端也会进行判断的,我们前端最好也进行判断. vue-router提供了导航钩子:全局前置导航钩子 beforeEa ...

  6. vue router动态路由

    <div id="#app"> <router-link to="/user/header">路由1</router-link&g ...

  7. vue router引入路由与路由配置容易犯错的地方与常见的报错与处理报错

    首先npm安装vue-router插件,就不说了其次: 先看下我本地的目录结构吧 第一步:在src目录下新建一个专门存放router的index.js文件里面的内容为: import Vue from ...

  8. Vue 2.0 路由全局守卫

    vue2.0 实现导航守卫(路由守卫) 路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navi ...

  9. vue路由守卫应用,监听是否登录

    路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navigation-guards). 导航守卫 ...

随机推荐

  1. PR回写 所有物料规划PR时对净需求+最小采购批量+安全库存+舍入值的先后考虑逻辑

    所有物料规划PR时对净需求+最小采购批量+安全库存+舍入值的先后考虑逻辑20171207-1228.docx PR回写案例一: '; --SAFE_QTY:安全库存 ' ; -- MIN_LOT_SI ...

  2. 使用Fiddler远程抓包(转载)

    转载自 http://www.cnblogs.com/111testing/p/6436372.html Fiddler简介以及web抓包 一.Fiddler简介 简单来说,Fiddler是一个htt ...

  3. JMeter (二十)参数化、检查点、集合点(转载)

    转载自 http://www.cnblogs.com/yangxia-test 参数化:简单的来理解一下,我们录制了一个脚本,这个脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密 ...

  4. 【Spider】使用CrawlSpider进行爬虫时,无法爬取数据,运行后很快结束,但没有报错

    在学习<python爬虫开发与项目实践>的时候有一个关于CrawlSpider的例子,当我在运行时发现,没有爬取到任何数据,以下是我敲的源代码:import scrapyfrom UseS ...

  5. :after伪类+content经典应用举例

    :after伪类+content 清除浮动的影响 .box{padding:10px; background:gray;} .l{float:left;} <div class="bo ...

  6. python基础入门学习1

    python比较 -python执行效率低,开发效率高. -JAVA执行效率高,开发效率低. python种类多:比如Jpython Cpython pypy(这是Cpython开发的python) ...

  7. Allowing GPU memory growth

    By default, TensorFlow maps nearly all of the GPU memory of all GPUs (subject to CUDA_VISIBLE_DEVICE ...

  8. 事务、cookie、session操作

    事务 import os if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE','BMS.settings ...

  9. typedef void(*Func)(void)的简单用途

    typedef void(*Func)(void)的用途 用法的好处: 定义一个函数指针类型. 例子: 有三个类型相似或功能相似的函数: void TASK1(void) { printf(" ...

  10. HDU-1074.DoingHomework(撞鸭dp二进制压缩版)

    之前做过一道二进制压缩的题目,感觉也不是很难吧,但是由于见少识窄,这道题一看就知道是撞鸭dp,却总是无从下手....最后看了一眼博客,才顿悟,本次做这道题的作用知识让自己更多的认识二进制压缩,并无其它 ...