广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue-router钩子函数实现路由守卫
  • 948
分享到

vue-router钩子函数实现路由守卫

2024-04-02 19:04:59 948人浏览 八月长安
摘要

目录概述全局钩子函数路由独享的钩子函数组件内的钩子函数概述 何为路由守卫?路由守卫有点类似于ajax的请求拦截器,就是请求发送之前先给你拦截住做一些事情之后再去发送请求,同样这里的路

概述

何为路由守卫?路由守卫有点类似于ajax的请求拦截器,就是请求发送之前先给你拦截住做一些事情之后再去发送请求,同样这里的路由守卫意思差不多;简单理解为就是你在进路由之前,首先把你拦住,对你进行检查;这是不是有点中学门口的保安?进来之前拦住,有学生证就进,没有学生证就不让进;当然,路由守卫不仅仅只是在你进入之前拦住你,还有其他的钩子函数进行其他操作;

Vue-router一共给我们提供了三大类钩子函数来实现路由守卫:

1、全局钩子函数(beforeEach、afterEach)

2、路由独享的钩子函数(beforeEnter)

3、组件内钩子函数(beforeRouterEnter、beforeRouterUpdate、beforeRouterLeave)

首先我们先来看一下全局钩子函数:

全局钩子函数

beforeEach:

beforeEach一共接收三个参数,分别是to、from、next;to:即将进入的路由对象;from:正要离开的路由对象;next:路由的控制参数;

next一共有四种调用方式:

next():一切正常调用这个方法进入下一个钩子;

next(false):取消路由导航,这时的url显示的是正要离开的路由地址;

next('/login'):当前路由被终止,进入一个新的路由导航(路由地址可以自由指定)

next(error):路由导航终止并且错误会被传递到router.onError()注册过的回调中;

我们一般是用全局钩子来控制权限,像什么进页面没有登录就跳登录页,需要用户达到什么级别才能访问当前页面都是属于页面权限控制,都是可以通过beforeEach钩子函数来实现:

main.js(全局钩子函数我们一般是在main.js中进行书写):


// 进入路由前方法勾子
router.beforeEach((to, from, next) => {
  console.log(to, '前置第一个参数')
  console.log(from, '前置第二个参数')
  console.log(next, '前置第三个参数')
  /
    to 目标路由
    from 源路由
    next 跳转到下一个路由
  */
//这里暂时用local、storange来简单模拟验证权限
  if (window.localstorange.getItem("token")) {
    // 如果存在,则直接跳转到对应路由
     next();
  } else {
    // 如果不存在,则跳转到登录页
    next('/login');
  }
});

AfterEach:

AfterEach和beforeEach一样都是属于全局守卫钩子,都是在main.js中进行调用;其中AfterEach比beforeEach少一个next参数;

from:正要离开的路由对象;

afterEach()我们一般用来重置页面滚动条位置:

假如我们有一个页面很长,滚动后其中的某个位置后跳转,这时新的页面的滚动条位置就会在上一个页面停留的位置;这个时候我们就可以利用afterEach进行重置:


//全局路由改变后钩子
router.afterEach((to, from) => {
  //将滚动条恢复到最顶端
  window.scrollTo(0, 0);
})

路由独享的钩子函数

beforeEneter:

路由独享顾名思义就是指定的路由才有这些钩子函数,通常这类路由独享的钩子函数我们是在路由配置文件中进行配置,只能设置改变前的钩子,不能设置改变后的钩子


const router=new VueRouter({
    routes
});
const routes=[
    {
        path:'/page1',
        component:page1,
        children: [
            {
                path: "phone",
                component: phone
            },
            {
                path: "computer",
                component: computer
            },
        ],
//路由独享的钩子函数
        beforeEnter:(to,from,next)=>{
            console.log(to);
            console.log(from);
            next(false);
        }
    },

上述代码理解为只有进入/page1才会触发beforeEnter这个钩子,如果进入其他页面,是不触发的;

组件内的钩子函数

beforeRouteEnter(to,from,next):

在路由进入前调用,因为此时的vue实例还没有创建,所以beforeEnter是唯一一个不能使用this的钩子函数;

to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数

beforeRouteUpdate(to,from,next):

在路由发生修改的时候进行调用,比如我们上一篇文章讲到的动态路由传参,这种情况我们的beforeRouteUpdate也是会被调用的;

 to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数;

beforeRouteLeave(to,from,next):

在路由离开该组件时调用;

to:即将要进入的路由对象;

from:正要离开的路由对象;

next:路由控制参数

注意:beforeRouteEnter因为触发的时候vue实例还没有创建,所以这个钩子函数中不能使用this,而beforeRouteUpdate和beforeRouteLeave都是可以访问到实例的,因为当这两个函数触发的时候实例都已经被创建了;

当调用组件内的钩子函数的时候,我们通常是在组件内部进行调用,举个例子:


<template>
    <div>
        <h1 id="h1">主页</h1>
        <p>
            <router-link to="/page1/phone">手机</router-link>
            <router-link to="/page1/computer">电脑</router-link>
        </p>
        <router-view></router-view>
    </div>
</template>
<script>
    export default {
    //路由进入前调用
  beforeRouteEnter (to, from, next) {
    window.document.title  = "欢迎";
    next();
  },
    //路由修改时调用
  beforeRouteUpdate(to,from,next){

  },
   //路由离开时调用
  beforeRouteLeave(to,from,next){

  },
        data () {
            return {
                msg: "我是page1组件"
            }
        },
    }
</script>    

以上就是vue-router钩子函数实现路由守卫的详细内容,更多关于vue-router路由守卫的资料请关注编程网其它相关文章!

--结束END--

本文标题: vue-router钩子函数实现路由守卫

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

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

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

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

下载Word文档
猜你喜欢
  • vue-router钩子函数实现路由守卫
    目录概述全局钩子函数路由独享的钩子函数组件内的钩子函数概述 何为路由守卫?路由守卫有点类似于ajax的请求拦截器,就是请求发送之前先给你拦截住做一些事情之后再去发送请求,同样这里的路...
    99+
    2022-11-12
  • 使用vue-router钩子函数怎么实现路由守卫
    这篇文章给大家介绍使用vue-router钩子函数怎么实现路由守卫,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。全局钩子函数beforeEach:beforeEach一共接收三个参数,分别是to、from、next;t...
    99+
    2023-06-14
  • Vue路由守卫之路由独享守卫如何实现
    这篇文章主要介绍了Vue路由守卫之路由独享守卫如何实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。路由独立守卫,顾名思义就是这个路由自己的...
    99+
    2022-10-19
  • vue路由钩子函数是哪几种
    这篇文章主要介绍“vue路由钩子函数是哪几种”,在日常操作中,相信很多人在vue路由钩子函数是哪几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue路由钩子函数是哪几种”...
    99+
    2022-10-19
  • vue-router子路由的实现方式
    目录实验目的创建Admin页面创建子页面修改router/index.js代码总结在应用界面开发中通常由多层嵌套的组件组合而成。 但随着页面的增多,如果把所有的页面都塞到一个 rou...
    99+
    2023-02-06
    vue-router子路由 vue-router路由 vue-router实现子路由
  • Vue + Vue-router如何实现同名路由切换数据不更新功能
    这篇文章将为大家详细讲解有关Vue + Vue-router如何实现同名路由切换数据不更新功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在默认情况下, 同名路由之间的...
    99+
    2022-10-19
  • Vue3使用vue-router如何实现路由跳转与参数获取
    目录vue-router实现路由跳转与参数获取路由跳转和传参路由跳转三种方法的总结一、第一种二、第二种三、第三种vue-router实现路由跳转与参数获取 路由跳转和传参 impor...
    99+
    2022-11-13
  • Vue3中怎么使用vue-router实现路由跳转与参数获取
    今天小编给大家分享一下Vue3中怎么使用vue-router实现路由跳转与参数获取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作