vue 路由与路由守卫

添加路由

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Detail from '../views/Detail.vue'
Vue.use(VueRouter)
  const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/detail',
    name: 'Detail',
    component: Detail
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue')
  }
]
const router = new VueRouter({
  routes
})
export default router

路由跳转

使用<router-link to="path路径"></router-link>进行路由跳转

使用<router-view></router-view>进行显示

路由重定向

使用redirect进行路由的重定向

  {
    path: '/',
    name: 'Home',
    component: Home,
    redirect:'/detail'
  },
  {
    path: '/detail',
    name: 'Detail',
    component: Detail,
    
  },

定义子路由

 {
    path: '/detail',
    name: 'Detail',
    component: Detail,
    children:[
    	{
    	 	path: 'info',
    	 	//以"/"开头的嵌套路径会被当作根路径,所以子路由上不用加"/";
    	 	 name: 'Info',
    		component: Info,
    	},
    ]
  },

路由传参

  • 使用$router.push实现携带参数跳转
  • 可以使用this.$route.params.id获取参数
getDetail(id) {
        this.$router.push({
          path: `/detail/${id}`,
        })

路由配置

{
     path: '/detail/:id',
     name: 'Detail',
     component: Detail
   }
  • 通过name值来确定路由,通过params进行传值
this.$router.push({
          name: 'Detail',
          params: {id: id}
        })
  • 通过path匹配路由,通过query进行传值
this.$router.push({
          path: '/Detail',
          query: {
            id: id
          }
        })

全局路由守卫

router.beforeEach((to, from, next) => {
  //to 前往的路由, from 来的路由, next 下一步钩子函数,没有问题,执行next() 
  console.log(to);
  if (to.path !== '/login') {
      if (window.isLogin) {
          next()
      } else {
          next('/login?redirect='+ to.path)
      }
  } else {
      next()
  }
})

组件内路由守卫

beforeRouteEnter(to,from,next){}
beforeRouteLeave(to,from,next){}
beforeRouteUpdate(to,from,next){}
beforeRouteEnter(to,from,next){
	if(localStorage.getItem("token")){next()}
	else{next("/login?redirect=/ball")}	
},

独享路由

beforeEnter(to,from,next){}
 {
    path: '/login',
    name: 'Login',
    component: Login,
	beforeEnter(to,from,next){Bus.$emit("showtabs",false),next()}
  },

缓存

在想要进行缓存的页面添加meta:{keep:true}

{
  	  path:"/category",
  	  component:Category,
  	  name:"Category",
	  meta:{keep:true}
  },

在app.vue中对router-view进行如下改造

<keep-alive>
	<router-view class="page" v-if="$route.meta.keep"></router-view>
</keep-alive>
<router-view class="page" v-if="!$route.meta.keep"></router-view>
  • 45
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 42
    评论
Vue 路由守卫是一种机制,用于在用户路由切换时对其进行监控和控制。路由鉴权是一种安全机制,用于验证用户是否有权限访问某个特定的路由或页面。 在 Vue 中,我们可以使用路由守卫来实现路由鉴权。路由守卫有三种类型:全局前置守卫、路由独享守卫和组件内的守卫。 全局前置守卫通过在创建 Vue Router 实例时添加 `beforeEach` 方法来实现。该方法接受一个回调函数,在每次路由切换前被触发。我们可以在回调函数中进行权限验证,例如判断用户是否登录以及是否有权限访问该路由。如果用户没有权限,我们可以通过 `next(false)` 或者 `next('/login')` 来中断路由导航或者跳转到登录页面。 路由独享守卫可以在路由配置中单独为某个路由添加 `beforeEnter` 方法来实现。该方法与全局前置守卫类似,可以在其中进行权限验证。 组件内的守卫包括 `beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave`。这些守卫可以在组件内部使用,用于对组件内的路由进行验证和处理。例如,在 `beforeRouteEnter` 守卫中,我们可以通过回调函数的参数 `next` 来控制路由导航,判断用户是否有权限访问该路由。 使用路由守卫路由鉴权可以有效地保护应用程序的安全性。通过在路由切换时进行权限验证,可以防止未授权的用户访问受限页面,并且可以根据需求进行灵活的权限控制。这是一个非常重要的概念,特别是在需要保护用户隐私和敏感数据的应用程序中。
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值