vue路由守卫的使用方法和应用场景

全局守卫

beforeEach中三个属性

router.beforeEach((to, from, next)=> { 

  if (!localStorage.getItem("token")) {

    if (to.path !== "/login") {

      return next("/login")

    }

  }

  next()

})

路由独享守卫 

const routes = [
  {
    path: '/admin',
    component: Admin,
    beforeEnter: (to, from, next) => {
      // 在进入路由前执行的逻辑
      // 可以根据需要进行权限控制或其他验证
      // to: Route对象,即将要进入的目标路由对象
      // from: Route对象,当前导航正要离开的路由
      // next: 一个函数,用于 resolve 进行钩子。一定要调用该方法来 resolve 这个钩子。
      
      // 示例:假设需要管理员权限才能进入该路由
      const isAdmin = checkAdminPermission(); // 自定义函数,检查是否是管理员
      
      if (isAdmin) {
        next(); // 允许进入路由
      } else {
        next('/login'); // 如果不是管理员,则重定向到登录页面或其他页面
      }
    }
  },
  // 其他路由配置
];
 

组件内路由守卫

<template>

        <div>

                <h2>User</h2>

                <p>User ID: {{ $route.params.id }}</p>

        </div>

</template>

<script>

export default {

        data() {

                return { user: null };

},

beforeRouteEnter (to, from, next) {

// 在进入路由前调用

// 不能直接访问 `this`,因为组件实例尚未创建

// 可以通过 `next` 方法传入一个回调来访问组件实例

         next(vm => {

// 通过 `vm` 访问组件实例

        console.log(vm.$route.params.id);

// 访问路由参数 });

},

beforeRouteUpdate (to, from, next) {

// 在当前路由改变,但是该组件被复用时调用

        console.log('Component is being reused'); next(); },

        beforeRouteLeave (to, from, next) {

// 在离开当前路由时调用

        console.log('Leaving User component');

        next(); } };

</script>

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 路由守卫是一种机制,用于在路由切换时执行一些操作或控制访问权限。Vue 提供了三种路由守卫:全局守卫、路由独享守卫和组件内守卫。 全局守卫是在整个应用程序中执行的路由守卫。可以使用 `router.beforeEach()` 函数定义全局守卫。下面是一个示例: ```javascript const router = new VueRouter({...}); router.beforeEach((to, from, next) => { // to 和 from 是路由对象,next 是一个函数 // 可以在这里检查用户是否已登录或是否有权限访问该路由 // 如果用户已登录或有权限访问该路由,则调用 next(),否则跳转到其他页面 next(); }); ``` 路由独享守卫是仅在某个路由中执行的守卫。可以使用 `beforeEnter` 属性定义路由独享守卫。下面是一个示例: ```javascript const router = new VueRouter({...}); const adminRoute = { path: '/admin', component: Admin, beforeEnter: (to, from, next) => { // 可以在这里检查用户是否已登录或是否有权限访问该路由 // 如果用户已登录或有权限访问该路由,则调用 next(),否则跳转到其他页面 next(); } } router.addRoutes([adminRoute]); ``` 组件内守卫是仅在某个组件内执行的守卫。可以使用 `beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave` 方法定义组件内守卫。下面是一个示例: ```javascript const Foo = { template: `...`, beforeRouteEnter(to, from, next) { // 在组件实例化之前调用 // 可以在这里异步获取数据,然后传递给组件 next(); }, beforeRouteUpdate(to, from, next) { // 在组件复用时调用 // 可以在这里根据新的路由参数更新组件数据 next(); }, beforeRouteLeave(to, from, next) { // 在组件离开路由时调用 // 可以在这里提示用户保存未提交的数据 next(); } } ``` 以上是 Vue 路由守卫的基本使用方法。在实际开发中,可以根据具体场景选择不同的路由守卫来实现相应的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值