Vue路由学习:守卫路由

Vue路由初始化:

import { createRouter, createWebHashHistory } from "vue-router";
// 存储路由的数组
// 创建路由规则
const routes = [
    {
        path: "/",
        alias: '/index',
        component: ()=> import('../router/GoodsView.vue')
    },
    {
        path: "/login",
        component: () => import('../router/Login.vue')
    },
    {
        path: "/register",
        component: () => import('../router/Register.vue')
    },
    {
        path: "/detail/:goodId",
        name: "detail",
        props: true, // 开启参数到属性的映射
        component: () => import('../router/GoodsDetailView.vue')
    },
    {
        //... 其他路由规则
    }
]

const router = createRouter({
    // 路由模式
    history: createWebHashHistory(),
    // 路由规则
    routes
})

export default router;

main.js文件中使用路由实例。 

import router from '../router/index.js'

const app = createApp(App)

// 使用创建的路由实例
app.use(router)

app.mount('#app')


Vue守卫路由:

Vue Router的导航守卫,也被称为路由守卫或路由拦截,是Vue Router提供的一种机制,主要通过跳转或取消的方式守卫(即控制)导航。这种机制允许开发者在路由发生变化前后执行一些操作,比如验证用户权限、设置标题、发送统计数据等。

Vue Router提供了几种类型的导航守卫,其中最常用的是全局前置守卫beforeEach。以下是一个简单的使用示例:

1. 首先,你需要在Vue项目中定义好你的路由。

const routes = [  
  { path: '/user/:id', component: User },  
  // 其他路由...  
];

2. 设置全局前置守卫:在路由配置文件中(通常是router/index.js),可以使用beforeEach方法来设置全局前置守卫。

router.beforeEach((to, from, next) => {  
  // 假设我们有一个检查用户是否已登录的函数  
  const isAuthenticated = checkUserAuthentication(); // 你的验证逻辑,返回布尔值  
  
  if (to.path !== '/login' && !isAuthenticated) {  
    // 如果用户未登录且目标路由不是登录页面,直接返回登录页面的路径  
    return '/login';  
  }  
  
  // 如果用户已登录或者目标路由是登录页面,不进行拦截,继续导航  
  return true; // 或者不返回任何值,默认会继续导航  
});

beforeEach守卫通过返回登录页面的路径'/login'来重定向未验证的用户。如果用户已通过验证,或者目标路由就是登录页面,则返回true表示允许导航继续(虽然在实际应用中,你通常不需要显式返回true,因为如果不执行任何返回操作,导航将默认继续)

在Vue Router 4(适用于Vue 3)中,返回值的方式是官方推荐的控制导航的方法,因为它更加简洁且易于理解。然而,在Vue Router 3及更早的版本中,你仍然需要使用next函数来控制导航流程。

使用Next函数具体如下:

router.beforeEach((to, from, next) => {  
  // 检查用户是否已登录  
  const isAuthenticated = ...; // 你的验证逻辑  
    
  if (to.path !== '/login' && !isAuthenticated) {  
    // 如果用户未登录且目标路由不是登录页面,则重定向到登录页面  
    next('/login');  
  } else {  
    // 否则,正常导航到目标路由  
    next();  
  }  
});

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue Router 提供了路由守卫来控制页面的访问权限。在 Vue 3 中,路由守卫的使用方式与 Vue 2 有一些不同。 在 Vue 3 中,我们可以使用 `beforeRouteEnter`、`beforeRouteUpdate` 和 `beforeRouteLeave` 这三个路由守卫来进行页面导航的控制。 - `beforeRouteEnter`:在进入路由之前调用,可以访问组件实例 (`this`),但是此时组件实例还未被创建,因此无法访问组件的实例属性和方法。 - `beforeRouteUpdate`:在当前路由改变,但是该组件被复用时调用,可以访问组件实例 (`this`),可以根据新的路由参数来更新组件数据。 - `beforeRouteLeave`:在离开当前路由之前调用,可以访问组件实例 (`this`),可以进行一些离开前的确认操作。 下面是一个使用路由守卫的示例: ```javascript import { createRouter, createWebHistory } from 'vue-router'; const router = createRouter({ history: createWebHistory(), routes: [ { path: '/home', component: Home, beforeEnter: (to, from, next) => { // 在进入 /home 路由之前执行的逻辑 // 可以在这里进行权限判断等操作 next(); } }, { path: '/profile', component: Profile, beforeEnter: (to, from, next) => { // 在进入 /profile 路由之前执行的逻辑 // 可以在这里进行权限判断等操作 next(); } } ] }); ``` 在上面的示例中,我们定义了两个路由 `/home` 和 `/profile`,并分别为它们设置了 `beforeEnter` 路由守卫。在 `beforeEnter` 中,我们可以根据需要进行权限判断等操作,并通过调用 `next()` 方法来继续导航。 注意,这里的示例只涉及到了全局前置守卫,还有其他类型的守卫,如组件内的守卫和全局后置守卫等。你可以根据具体需求选择使用不同类型的守卫来实现路由控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值