iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >vue的导航守卫怎么使用
  • 419
分享到

vue的导航守卫怎么使用

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

这篇文章主要讲解了“Vue的导航守卫怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的导航守卫怎么使用”吧! 导航守

这篇文章主要讲解了“Vue的导航守卫怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的导航守卫怎么使用”吧!

导航守卫有:1、全局前置守卫“beforeEach”;2、全局解析守卫“beforeResolve”;3、路由独享的守卫“beforeEnter”;4、组件内的守卫“beforeRouteEnter”、“beforeRouteLeave”。

vue的导航守卫怎么使用

教程操作环境:windows7系统、vue2.9.6版,DELL G3电脑。

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。

记住参数或查询的改变并不会触发进入/离开的导航守卫。你可以通过观察 $route 对象来应对这些变化,或使用 beforeRouteUpdate 的组件内守卫。

全局前置守卫

你可以使用 router.beforeEach 注册一个全局前置守卫:

const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
  // ...
})

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象

  • from: Route: 当前导航正要离开的路由

  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

    • next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

    • next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

    • next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

    • next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保 next 函数在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错。这里有一个在用户未能验证身份时重定向到 /login 的示例:

// BAD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  // 如果用户未能验证身份,则 `next` 会被调用两次
  next()
})
// GoOD
router.beforeEach((to, from, next) => {
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})

全局解析守卫

2.5.0 新增

在 2.5.0+ 你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach 类似,区别是在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用。

路由独享的守卫

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

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

这些守卫与全局前置守卫的方法参数是一样的。

组件内的守卫

最后,你可以在路由组件内直接定义以下路由导航守卫:

  • beforeRouteEnter

  • beforeRouteUpdate (2.2 新增)

  • beforeRouteLeave

const Foo = {
  template: `...`,
  beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate(to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave(to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。

不过,你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

beforeRouteEnter (to, from, next) {
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}

注意 beforeRouteEnter 是支持给 next 传递回调的唯一守卫。对于 beforeRouteUpdate 和 beforeRouteLeave 来说,this 已经可用了,所以不支持传递回调,因为没有必要了。

beforeRouteUpdate (to, from, next) {
  // just use `this`
  this.name = to.params.name
  next()
}

这个离开守卫通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 next(false) 来取消。

beforeRouteLeave (to, from, next) {
  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
  if (answer) {
    next()
  } else {
    next(false)
  }
}

完整的导航解析流程

  • 导航被触发。

  • 在失活的组件里调用 beforeRouteLeave 守卫。

  • 调用全局的 beforeEach 守卫。

  • 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。

  • 在路由配置里调用 beforeEnter。

  • 解析异步路由组件。

  • 在被激活的组件里调用 beforeRouteEnter。

  • 调用全局的 beforeResolve 守卫 (2.5+)。

  • 导航被确认。

  • 调用全局的 afterEach 钩子。

  • 触发 DOM 更新。

  • 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

感谢各位的阅读,以上就是“vue的导航守卫怎么使用”的内容了,经过本文的学习后,相信大家对vue的导航守卫怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: vue的导航守卫怎么使用

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

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

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

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

下载Word文档
猜你喜欢
  • Vue导航守卫怎么使用
    这篇文章主要介绍“Vue导航守卫怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue导航守卫怎么使用”文章能帮助大家解决问题。守卫参数to: 即将要进入的目标路由from: 当前导航即将要离...
    99+
    2023-07-06
  • vue的导航守卫怎么使用
    这篇文章主要讲解了“vue的导航守卫怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的导航守卫怎么使用”吧! 导航守...
    99+
    2022-10-19
  • vue-router的导航守卫怎么使用
    这篇文章主要介绍了vue-router的导航守卫怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue-router的导航守卫怎么使用文章都会有所收获,下面我们一起来看看吧。前言在浏览器中点击链接实现导航...
    99+
    2023-07-04
  • Vue导航守卫使用教程详解
    目录守卫参数守卫返回值全局守卫全局前置守卫全局解析守卫全局后置钩子单个路由独享守卫组件级守卫完整的导航解析流程总结作用:通过跳转或取消的方式守卫导航 植入方式: 全局守卫单个路由独享...
    99+
    2023-05-15
    Vue导航守卫 Vue导航守卫的作用
  • vue中的导航守卫使用及说明
    目录导航守卫全局守卫独享守卫组件内守卫vue导航守卫有哪些路由的钩子函数有六个全局路由钩子函数路由内的钩子函数组件内的钩子函数总结导航守卫 作用:对路由进行权限控制分类:全局守卫、独...
    99+
    2023-01-28
    vue导航守卫 导航守卫使用 导航守卫
  • vue-router的导航守卫使用最新讲解
    目录前言vue-router中编程式导航API导航守卫全局守卫独享路由守卫组件路由守卫前言 在浏览器中点击链接实现导航的方式,叫做声明式导航。例如:普通网页中点击<a>链...
    99+
    2022-12-16
    vue-router导航守卫 vue-router导航守卫使用
  • Vue中的路由导航守卫导航解析流程
    目录全局前置守卫全局解析守卫全局后置钩子路由独享的守卫组件内的守卫可用的配置 API使用组合 API完整的导航解析流程正如其名,vue-router 提供的导航守卫主要用来通过跳转或...
    99+
    2023-05-16
    Vue路由导航守卫 Vue路由守卫
  • vue-router导航守卫的示例分析
    这篇文章将为大家详细讲解有关vue-router导航守卫的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当做Vue-cli项目的时候需要在路由跳转前做一些验证,比...
    99+
    2022-10-19
  • Vue3中的导航守卫如何使用
    查看以下情形:默认情况下,点击主页链接可直接进入指定界面,但是该界面是需要用户登录后方可访问的,这是个问题可设置导航守卫来检测用户是否登录,如果已登录,则进入后台页,如果未登录,则强制进入登录页,如图二、导航守卫有哪几种?1、全局守卫(3个...
    99+
    2023-05-16
    Vue3
  • Vue路由导航守卫的示例分析
    这篇文章将为大家详细讲解有关Vue路由导航守卫的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概念:“导航”表示路由正在发生变化vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫...
    99+
    2023-06-22
  • 关于Vue中的全局导航守卫(beforeEach、afterEach)
    目录全局导航守卫(beforeEach、afterEach)导航钩子有3个参数beforeEachafterEach全局导航守卫是干什么的?1.在router中的index.js文件...
    99+
    2022-11-13
  • Vue3中导航守卫的基本使用方法
    目录前言:一、什么是导航守卫?二、导航守卫有哪几种?1、全局守卫(3个)全局前置守卫全局解析守卫全局后置钩子2、路由独享守卫(1个)三、导航守卫的三个参数四、如何在 vue3 中使用...
    99+
    2023-03-09
    vue 导航守卫 Vue3导航守卫 vue 导航
  • Vue中路由守卫怎么用
    小编给大家分享一下Vue中路由守卫怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.全局守卫1.1 全局前置守卫顾名思义,前置守卫主要是在你进行路由跳转之前根据你的状态去 进行一系列操作(全局前置是为在路由初始化以及...
    99+
    2023-06-21
  • Vue中的全局守卫怎么配置
    这篇文章主要介绍了Vue中的全局守卫怎么配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中的全局守卫怎么配置文章都会有所收获,下面我们一起来看看吧。全局守卫在main.js中进行配置:import&nb...
    99+
    2023-07-05
  • Vue中路由守卫的具体使用
    目录1.全局守卫1.1 全局前置守卫1.2 全局后置路由守卫1.3 整合2. 路由独享的守卫3.组件内的守卫作用:对路由进行权限控制 分类:全局守卫、独享守卫、组件内守卫 1.全局守...
    99+
    2022-11-12
  • vue导航钩子怎么用
    这篇文章将为大家详细讲解有关vue导航钩子怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。导航钩子正如其名,vue-router 提供的导航钩子主要用来拦截导航,让它...
    99+
    2022-10-19
  • vue的导航链接组件怎么使用
    本篇内容主要讲解“vue的导航链接组件怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue的导航链接组件怎么使用”吧!vue的导航链接组件是“router-link”。“<rout...
    99+
    2023-07-04
  • vue3中的路由守卫怎么使用
    这篇文章主要介绍“vue3中的路由守卫怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue3中的路由守卫怎么使用”文章能帮助大家解决问题。路由守卫有哪几种?路由守卫(导航守卫)分为三种:全局...
    99+
    2023-07-06
  • vue-router的导航钩子怎么用
    这篇文章主要讲解了“vue-router的导航钩子怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue-router的导航钩子怎么用”吧! vue-...
    99+
    2022-10-19
  • vue-router导航钩子怎么用
    这篇文章主要介绍vue-router导航钩子怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消。全局钩子1、...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作