情景一:在用户刚打开网站时,自动跳转到登录页面,登录成功可以访问

router》index.js页面

import Vue from 'vue'
import Router from 'vue-router'

const Login =  () => import('@/views/login')
const Home =  () => import('@/views/home/home')

Vue.use(Router)
const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/', // 默认地址
      redirect: '/home'
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      meta: {
        title: '登录',
        keepAlive: false // 不需要被缓存
      }
    },
    {
      path: '/home',
      name: 'home',
      component: Home,
      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 = ['home'] // 需要登录的页面
  let isLogin = sessionStorage.getItem('userMsg');
  // 未登录状态;当路由到 nextRoute 指定页时,跳转至 login
  if (nextRoute.indexOf(to.name) >= 0) { // 检测是否登录的页面
    if (!isLogin) { // 如果未登录(本地存储无用户数据),并且要跳到登录页面
      if (from.name === 'login') {
        next('/')
        return
      }
      // 登录后,跳到到当前页面
      router.push({
        name: 'login',
        params: {redirect: to.fullPath}  
      })
    }
  }
  // 已登录状态;当路由到 login 时,跳转至 home
  if (to.name === 'login') {
    if (isLogin) {
      next('/')
      return
    }
  }
  next() // 必须使用 next ,执行效果依赖 next 方法的调用参数
})
export default router

备注:因为时判断用户是不是有userMsg,所以在登录成功(login页面)的时候将userMsg存缓存

sessionStorage.setItem('userMsg', 'admin');我这里用了sessionStorage大家可以百度和localstorage的区别,来用适合你们的缓存
 

情景二:用户刚打开网站时,在需要登录的页面跳转登录,不需要登录的就不用

router》index.js页面

import Vue from 'vue'
import Router from 'vue-router'

const Login =  () => import('@/views/login')
const Home =  () => import('@/views/home/home')
const Pay=  () => import('@/views/pay/Pay')

Vue.use(Router)
const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/', // 默认地址
      redirect: '/home'
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      meta: {
        title: '登录',
        keepAlive: false // 不需要被缓存
      }
    },
    {
      path: '/home',
      name: 'home',
      component: Home,
      meta: {
        title: '主页',
        keepAlive: true, // 需要被缓存
        needLogin: false//不需要登录
      }
    },
{
      path: '/pay',
      name: 'pay',
      component: Pay,
      meta: {
        title: '主页',
        keepAlive: true, // 需要被缓存
        needLogin: true//需要登录
      }
    }
  ],
  scrollBehavior (to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      return {x: 0, y: 0}
    }
  }
})
// 全局路由守卫
router.beforeEach((to, from, next) => {
  let isLogin = sessionStorage.getItem('userMsg');
  if (to.meta.needLogin) {  // 判断该路由是否需要登录权限
    if (isLogin) { // 判断是否已经登录
      next()
    }
    else {
      next({
        path: '/login',
        query: {redirect: to.fullPath}  // 将跳转的路由path作为参数,登录成功后跳转到该路由
      })
    }
  }
  else {
    next()
  }
})
export default router

备注:因为时判断用户是不是有userMsg,所以在登录成功(login页面)的时候将userMsg存缓存

sessionStorage.setItem('userMsg', 'admin');我这里用了sessionStorage大家可以百度和localstorage的区别,来用适合你们的缓存

 

漂亮的分割线····


 

结束····