首页 > 其他分享 >vue全家桶进阶之路37:Vue3 路由守卫

vue全家桶进阶之路37:Vue3 路由守卫

时间:2023-04-18 17:00:50浏览次数:38  
标签:vue 进阶 示例 router 37 next 跳转 path 路由

在 Vue.js 3.x 中,我们可以使用路由守卫来拦截路由的跳转,从而实现一些功能,例如:登录验证、页面权限控制等。

Vue.js 3.x 中的路由守卫和 Vue.js 2.x 中的基本相同,都包含了 beforeEachbeforeResolveafterEach 等钩子函数。

下面是一些常见的路由守卫用法示例:

  1. beforeEach

beforeEach 在跳转之前被调用,可以用来进行登录验证等操作。示例代码如下:

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/user/:id',
      component: User
    }
  ]
})

router.beforeEach((to, from, next) => {
  // 验证是否已登录
  const loggedIn = false
  if (to.path !== '/' && !loggedIn) {
    next('/')
  } else {
    next()
  }
})

在上述示例中,我们使用 beforeEach 路由守卫验证用户是否已登录,如果没有登录则跳转到首页。

  1. beforeResolve

beforeResolve 在跳转之前被调用,并且在 beforeEach 之后,可以用来进行一些异步操作等操作。示例代码如下:

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/user/:id',
      component: User,
      beforeResolve: async (to, from, next) => {
        // 异步操作
        await someAsyncOperation()

        next()
      }
    }
  ]
})

在上述示例中,我们使用 beforeResolve 路由守卫进行了一些异步操作,然后在操作完成后调用了 next 方法继续跳转。

  1. afterEach

afterEach 在跳转完成之后被调用,可以用来进行一些页面操作等操作。示例代码如下:

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/user/:id',
      component: User
    }
  ]
})

router.afterEach((to, from) => {
  // 页面操作
  console.log(`从 ${from.path} 跳转到 ${to.path}`)
})

在上述示例中,我们使用 afterEach 路由守卫进行了一些页面操作,例如在控制台中输出了跳转信息。

标签:vue,进阶,示例,router,37,next,跳转,path,路由
From: https://www.cnblogs.com/beichengshiqiao/p/17330268.html

相关文章

  • 05_面向对象(进阶)
    目录五、面向对象(进阶)5.1关键字:this5.1.1this的使用场景5.1.2this调用构造器5.2面向对象特征二:继承5.2.1继承性的理解5.2.2继承的优点5.2.3继承的格式5.2.4默认的父类5.2.5补充说明5.3封装性中4种权限修饰5.4方法的重写(overwrite/override)5.4.1方法重写概述5.4.2方......
  • vue不同页面方法调用|跨页面传参|事件总线
    事件总线需要在不同页面间传递参数或者进行方法调用,可以使用事件总线1.引入中间js在src下的Utils文件夹下创建一个Bus.js其内容如下importVuefrom'vue'exportdefaultnewVue()2.A页面(发起请求)importEventfrom'@/utils/Bus'Event.$emit('getlog',参数)3.B页面(......
  • vue3微信公众号商城项目实战系列(7)自定义底部tabbar组件
    在开始之前,先看看官方对组件的定义: vue3的生态非常丰富,有各种各样的开源组件库可以拿来就用,比如vant、element-ui等,本系列不使用任何第3方组件,完全使用原生的语法来写,只为聚焦vue3技术本身,本篇写一个自定义tabbar组件,效果如下图所示:要实现如下功能:1.底部tab项固定3个:首页......
  • vue全家桶进阶之路33:Vue3 计算属性computed
    在Vue3中,计算属性可以使用computed函数来定义。computed函数接受两个参数:第一个参数是一个函数,该函数返回计算属性的值;第二个参数是一个可选的配置对象,可以包含getter和setter函数,以及控制计算属性缓存的缓存配置。Vue3中的计算属性与Vue2中的计算属性相比有以下几个变化:使用......
  • 直播app源码,使用vue-awesome-swiper创建轮播图幻灯片
    直播app源码,使用vue-awesome-swiper创建轮播图幻灯片1.引入引入方式可以参考官方文档,两种方式选一种即可:vue-awesome-swiperatv3.1.3 (1)第一种方式:在main.js入口文件中全局引入 ///src/main.js //swiper全局引入importVueAwesomeSwiperfrom'vue-awesome-swiper'im......
  • vue项目使用定时器每隔几秒运行一次某方法
    代码如下:data(){return{timer:null,//定时器名称};},created(){this.setTime();},beforeDestroy(){clearInterval(this.timer);//清除定时器this.timer=null;},methods:{setTime(){//每隔一分钟运行一次保存方法this.timer......
  • 初识vue3
    定义Vue是一款Javascript框架,基于前端三大件,提供了具有组件化,声明式,渐进式的特点的编程模型。核心功能1.声明式渲染2.响应式组件之单文件组件Vue最为核心的组成部分便是单文件组件,文件结尾为*.vue宏观的逻辑是这样的:*.vue创建组件->.js文件中将组件实例化生成一个应用实......
  • vite vue使用pont-engine
    pont-engine是一款阿里的api生成工具!安装依赖即可yarnadd--devpont-engine然后即可使用pontstart问题但是因为默认生成的代码包含cjs的模块语法,所以vite无法识别。另外生成代码前最好把旧的生成目录删除!解决办法因此我做了如下优化,让您一键执行这些操作并生成适......
  • ip 表单验证 vue iview
    ip表单验证vueiviewtemplate<Rowv-show="config.bindIP"><Colspan="12"><FormItemlabel="绑定IP:"prop="userPhoto":rules="[{required:t......
  • vue中使两个不同高度的div(内容长度不一)高度相同
    设置高度height,记得给左右侧div一个最小高度min-height,保证没有内容的时候有一定的高度,内容撑起来的时候再自动适应<el-col:xs="12":sm="6":md="2"class="grid-cell"><divclass="grid-contentbg-purple":style="{height:divH......