iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue3中导航守卫的基本使用方法
  • 543
分享到

Vue3中导航守卫的基本使用方法

vue 导航守卫Vue3导航守卫vue 导航 2023-03-09 17:03:23 543人浏览 薄情痞子
摘要

目录前言:一、什么是导航守卫?二、导航守卫有哪几种?1、全局守卫(3个)全局前置守卫全局解析守卫全局后置钩子2、路由独享守卫(1个)三、导航守卫的三个参数四、如何在 vue3 中使用

前言:

在编写Vue里的登录注册时,我们始终绕不开对导航守卫的使用,vue-router4.0版里有一些重要更新,在这里分享给大家。

一、什么是导航守卫?

正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。

查看以下情形:

点击主页链接时,默认情况下可直接进入指定界面,如图,但是问题是该跳转的界面是需要用户登录后方可访问的

未处理登录跳转主页

可设置导航守卫来检测用户是否登录,如果已登录,则进入后台页,如果未登录,则强制进入登录页,如图

导航守卫来检测是否登录

二、导航守卫有哪几种?

1、全局守卫(3个)

全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置守卫,因此,在全局前置守卫中,程序员可以对每个路由进行访问权限的控制

1、 使用方式

你可以在 router/index.js 页面中使用 router.beforeEach((to, from, next) => {}) 注册一个全局前置守卫。

2、 代码:

// router/index.js 页面

router.beforeEach((to, from, next) => {
    console.log(to, from);
    next()
});

全局解析守卫

1、 使用方式
你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach 类似,因为它在 每次导航时都会触发,但是确保在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被正确调用。

2、 代码:

// router/index.js 页面

router.beforeResolve((to, from, next) => {
    console.log(to,from);
    next()
})

全局后置钩子

1、 使用方式
你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next 函数也不会改变导航本身:

2、 代码:

// router/index.js 页面

router.afterEach((to, from) => {
    console.log(to,from);
})

它们对于分析、更改页面标题、声明页面等辅助功能以及许多其他事情都很有用。

2、路由独享守卫(1个)

1、 使用方式

你可以直接在路由配置上定义 beforeEnter 守卫:

2、 代码:

// router/index.js 页面(路由规则中)

const routes = [
	{
	    path: '/home',
	    name: 'Home',
	    component: HomeView,
	    beforeEnter: (to, from,next) => {
	        console.log(to, from);
	        next()
	    },
	}, 
]

3、组件内守卫(3个)

组件内守卫有个三个:路由进入之前beforeRouteEnter,路由离开时beforeRouteLeave,页面更新时beforeRouteUpdate

beforeRouteEnter(to, from, next)

1、 使用方式
在组件模板中使用,跟methods: {}等同级别书写,组件路由守卫是写在每个单独的vue文件里面的路由守卫

2、 代码:

// vue 组件内使用

onBeforeRouteUpdate((to, from) => {
  //当前组件路由改变后,进行触发
  console.log(to);
});
注意:在 vue3 中的 setup 函数中是不可以使用 beforeRouterEnter 这个路由守卫的

beforeRouteUpdate(to, from, next)

1、 使用方式
在组件模板中使用,跟 methods: {} 等同级别书写,组件路由守卫是写在每个单独的 vue 文件里面的路由守卫

2、 代码:

// vue 组件内使用

onBeforeRouteUpdate((to, from) => {
  //当前组件路由改变后,进行触发
  console.log(to);
});

beforeRouteLeave(to, from, next)

1、 使用方式 在组件模板中使用, 跟methods: {} 等同级别书写,组件路由守卫是写在每个单独的 vue 文件里面的路由守卫

2、 代码:

// vue 组件内使用

onBeforeRouteLeave((to, from) => {
  //离开当前的组件,触发
  alert("我离开啦");
});

三、导航守卫的三个参数

  • to:将要访问的路由信息对象
  • from:将要离开的路由信息对象
  • next:函数

    调用next()表示放行,允许这次路由导航

    调用next(false)表示不放行,不允许此次路由导航

    调用next({routerPath})表示导航到此地址,一般情况用户未登录时,会导航到登陆界面

提示:该函数在导航守卫中可出现多次,但是只能被调用一次!!!

四、如何在 vue3 中使用 beforeRouteEnter

如果你正在使用组合 api 和 setup 函数来编写组件,你可以通过 onBeforeRouteUpdate 和 onBeforeRouteLeave 分别添加 update 和 leave 守卫。 请参考组合 API 部分以获得更多细节。

具体请看vue-router的官方文档
导航守卫 | Vue Router

方法一、我们可以在设置路由的时候,使用beforeEnter方法拦截,即在router.js中:

{
	path: '/',
	name: 'home
	component: () => import('@/xxx.vue'),
	beforeEnter: (to, from) => {
		// 可以在定义路由的时候监听from和to
	}
}

方法二、我们还可以使用vue2的写法,使用选项式api,就可以使用beforeRouterEnter这个钩子了

<script>
export default {
	beforeRouteEnter(to, from) {
		console.log('before router enter', to, from)
	},
	mounted() {
		console.log('mounted')
	},
}

五、模拟登录注册案例

// 模拟是否登录(true为登录,false为未登录)
let token = true
router.beforeEach((to, from, next) => {
    // 判断有没有登录
    if (!token) {
    	// 如果没有登录,并且是跳转至登录页
        if (to.name == "Login") {
        	// 直接跳转
            next();
        } else {
        	// 否则直接强制跳转至登录页
            router.push('/login')
        }
    } else {
    	// 如果已经登录,并且不是跳转至登录页
        if (to.name !== "Login") {
        	// 直接跳转
            next();
        } else {
        	// 否则直接强制跳转至上一个页面
            router.push(from.path)
        }
    }
});

总结:

到此这篇关于Vue3中导航守卫的基本使用方法的文章就介绍到这了,更多相关Vue3导航守卫使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue3中导航守卫的基本使用方法

本文链接: https://www.lsjlt.com/news/199121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue3中导航守卫的基本使用方法
    目录前言:一、什么是导航守卫?二、导航守卫有哪几种?1、全局守卫(3个)全局前置守卫全局解析守卫全局后置钩子2、路由独享守卫(1个)三、导航守卫的三个参数四、如何在 vue3 中使用...
    99+
    2023-03-09
    vue 导航守卫 Vue3导航守卫 vue 导航
  • Vue3中的导航守卫如何使用
    查看以下情形:默认情况下,点击主页链接可直接进入指定界面,但是该界面是需要用户登录后方可访问的,这是个问题可设置导航守卫来检测用户是否登录,如果已登录,则进入后台页,如果未登录,则强制进入登录页,如图二、导航守卫有哪几种?1、全局守卫(3个...
    99+
    2023-05-16
    Vue3
  • vue的导航守卫怎么使用
    这篇文章主要讲解了“vue的导航守卫怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的导航守卫怎么使用”吧! 导航守...
    99+
    2022-10-19
  • vue中的导航守卫使用及说明
    目录导航守卫全局守卫独享守卫组件内守卫vue导航守卫有哪些路由的钩子函数有六个全局路由钩子函数路由内的钩子函数组件内的钩子函数总结导航守卫 作用:对路由进行权限控制分类:全局守卫、独...
    99+
    2023-01-28
    vue导航守卫 导航守卫使用 导航守卫
  • vue-router的导航守卫怎么使用
    这篇文章主要介绍了vue-router的导航守卫怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue-router的导航守卫怎么使用文章都会有所收获,下面我们一起来看看吧。前言在浏览器中点击链接实现导航...
    99+
    2023-07-04
  • vue-router的导航守卫使用最新讲解
    目录前言vue-router中编程式导航API导航守卫全局守卫独享路由守卫组件路由守卫前言 在浏览器中点击链接实现导航的方式,叫做声明式导航。例如:普通网页中点击<a>链...
    99+
    2022-12-16
    vue-router导航守卫 vue-router导航守卫使用
  • vue3中的路由守卫怎么使用
    这篇文章主要介绍“vue3中的路由守卫怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue3中的路由守卫怎么使用”文章能帮助大家解决问题。路由守卫有哪几种?路由守卫(导航守卫)分为三种:全局...
    99+
    2023-07-06
  • vue3中$refs的基本使用方法
    1、在vue2中可以通过this来访问到$refs,vue3中由于没有this所以获取不到了,但是官网中提供了方法来获取 知道了怎么获取后,我们结合ElementPlus来使用,因...
    99+
    2022-11-13
  • angular9中路由守卫的使用方法
    小编给大家分享一下angular9中路由守卫的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!路由守卫是什么任何用户都能在任何时候导航到任何地方。但有时候出...
    99+
    2023-06-14
  • Vue3中vuex的基本使用方法实例
    目录一、基本结构二、基本使用三、将store中的数据模块化后的使用1.模块化2.使用补充:如何改变vuex中的属性总结 一、基本结构 src/store/index.js中...
    99+
    2022-11-13
  • Vue3中Typescript的基本使用方法有哪些
    这篇文章主要介绍“Vue3中Typescript的基本使用方法有哪些”,在日常操作中,相信很多人在Vue3中Typescript的基本使用方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中Ty...
    99+
    2023-06-27
  • Android Jetpack组件Navigation导航组件的基本使用
    目录1.Navigation 基本概念2.Navigation 使用入门2.1 添加Navigation依赖2.2 创建导航图2.3 导航图中添加目的地Fragment2.4 Act...
    99+
    2022-11-13
  • vue3中proxy的基本用法说明
    目录vue3 proxy基本用法新的改变基本使用vue3中proxy代理理解Proxy代理vue3 proxy基本用法 新的改变 我们的vue3 使用proxy 来代替vue2 的 ...
    99+
    2022-11-13
  • Vue中的路由使用和多种守卫方法是什么
    今天小编给大家分享一下Vue中的路由使用和多种守卫方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.vue-rou...
    99+
    2023-07-05
  • vue3.x中emits的基本用法实例
    这是官方的文字介绍。emits重要用于组件之间的通信,触发自定义事件,传递参数。 下面演示一个子组件把事件传递到父组件,组件间通信的例子。 <template> ...
    99+
    2022-11-13
  • Vue3中Pinia的基本使用笔记
    目录什么是Pinia呢?Pinia和Vuex的区别与Vuex相比,Pinia很多的优势:如何使用Piniastore的核心部分:state,getter,action认识和定义Sta...
    99+
    2022-11-13
    vue3 pinia实战 vue3 pinia项目 vue 实战
  • 从SQL Server中导入和导出Excel的基本方法
    这篇文章主要讲解了“从SQL Server中导入和导出Excel的基本方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“从SQL Server中导入和导出E...
    99+
    2022-10-18
  • vue2和vue3中provide/inject的基本用法示例
    目录前言vue2基本用法:1.provide2.inject如何成为响应式?1.方法一:函数方法2.方法二:传递thisvue3的基本用法:总结前言 昨天看一个项目代码看到了prov...
    99+
    2023-05-17
    vue中provideinject vue中provide的用法 vue中的inject
  • MyBatis中association的基本使用方法
    目录通过association对两表进行联表查询按照查询嵌套处理按照结果嵌套处理总结通过association对两表进行联表查询 student表属性如下 teacher表属性如下...
    99+
    2022-11-13
  • GoLang中Module的基本使用方法
    目录前言1、开启go module2、用goland打开项目(1)设置镜像地址(2)导入Gin包检查go module是否使用正常(3)使用Gin(4)执行、发送请求3、go mod...
    99+
    2023-01-09
    go module实现原理 go module使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作