Vue路由钩子详解

Vue.js 是一个构建数据驱动的 Web 界面的渐进式框架,核心库叫做「Vue」,这个库只关注视图层,采用自底向上增量开发的设计。

Vue.js 官方提供了一个扩展插件 Vue Router,它允许构建 SPA(Single Page Application)单页面应用程序。Vue Router 的作用是将每个路由映射到一个组件,然后将组件渲染到 DOM 中。

Vue Router 允许开发人员在路由改变时添加「钩子函数」,并且支持许多不同类型的钩子。本篇文章将深入解析 Vue 路由的各种钩子函数及其作用。

一、全局前置守卫:beforeEach

使用 Vue Router 时,它提供了多个路由导航钩子,其作用类似于其他框架中路由的生命周期函数。其中,全局前置守卫 `beforeEach` 是最常用的一个。这个钩子函数会在路由即将改变前被调用。我们可以利用这个钩子函数,实现登录、权限验证等场景。

beforeEach 函数接收三个参数:

  1. to: 即将要进入的目标路由对象
  2. from: 当前导航正要离开的路由对象
  3. next: 调用该方法后,才能进入下一个钩子函数,否则路由将会被中断
const router = new Router({
  routes: [
    {
      path: '/admin',
      component: Admin,
      meta: { requiresAuth: true }
    }
  ]
})

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!userLoggedIn()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next()
  }
})

上面的代码实现了一个简单的登录权限校验,如果用户未登录,路由将被重定向到登录页;否则,用户将被跳转到下一步操作的路由。

二、全局后置钩子:afterEach

Vue Router 还提供了另外一个路由导航钩子函数 afterEach,这个函数会在路由改变之后被调用。它没有 next 参数,也就不能中断路由,但我们常常可以利用这个钩子函数,实现页面的统计、日志打印等操作。

router.afterEach((to, from) => {
  logPageView(to.path)
})

上面的代码实现了一个简单的页面访问日志打印,每当路由改变后,将会记录下页面的相关信息。

三、组件内守卫

在 Vue Router 中,我们还可以使用组件内路由钩子,这些钩子函数作用于组件级别。常用的组件内路由钩子有这几个:

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

这些钩子每次都会在相应的路由导航期间触发。

3.1 beforeRouteEnter

beforeRouteEnter 钩子可以访问组件实例 `this`,但是此时组件实例尚未创建。beforeRouteEnter 钩子中,不能使用 `this.props` 访问组件 props。

如果需要访问组件 props,我们可以通过回调函数,将 props 作为参数来传递。

const Post = {
props: ['id', 'title'],

beforeRouteEnter (to, from, next) {
axios.get(`/api/post/${to.params.id}`)
.then(response => {
next(vm => {
vm.post = response.data
})
})
},

data () {
return {
post: null
}
},

template: `

{{ post.title }}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/194666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-02 14:40
下一篇 2024-12-02 14:40

相关推荐

  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • Vue3的vue-resource使用教程

    本文将从以下几个方面详细阐述Vue3如何使用vue-resource。 一、安装Vue3和vue-resource 在使用vue-resource前,我们需要先安装Vue3和vue…

    编程 2025-04-27
  • ThinkPHP6 + Vue.js: 不使用Fetch的数据请求方法

    本文将介绍如何在ThinkPHP6和Vue.js中进行数据请求,同时避免使用Fetch函数。 一、AJAX:XMLHttpRequest的基础使用 在进行数据请求时,最基础的方式就…

    编程 2025-04-27
  • Vue模拟按键按下

    本文将从以下几个方面对Vue模拟按键按下进行详细阐述: 一、Vue 模拟按键按下的场景 在前端开发中,我们常常需要模拟按键按下的场景,比如在表单中填写内容后,按下“回车键”提交表单…

    编程 2025-04-27
  • 开发前端程序,Vue是否足够?

    Vue是一个轻量级,高效,渐进式的JavaScript框架,用于构建Web界面。开发人员可以使用Vue轻松完成前端编程,开发响应式应用程序。然而,当涉及到需要更大的生态系统,或利用…

    编程 2025-04-27
  • 如何在Vue中点击清除SetInterval

    在Vue中点击清除SetInterval是常见的需求之一。本文将介绍如何在Vue中进行这个操作。 一、使用setInterval和clearInterval 在Vue中,使用set…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25

发表回复

登录后才能评论