mounted 先于 router.beforeEach 执行的问题

本文深入探讨了Vue中使用router.beforeEach全局导航钩子进行路由前验证的机制。揭示了一个关键现象:当直接通过URL访问页面时,Vue单页面应用会先执行mounted钩子,然后才触发BeforeEach。文章强调了在main.js中正确配置的重要性,需先定义BeforeEach钩子,再实例化Vue。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用vue中的router.beforeEach 全局导航钩子实现进入路由前验证,直接使用url打开页面时,居然先执行vue单页面中的mounted钩子,再执行的BeforeEach。

原因:

在main.js中定义时 需要

先定义 router.beforeEach

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

再 vue实例化 

new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

 

### Vue-Router 配置及使用教程 #### 一、安装 Vue-Router 为了在项目中使用 `Vue Router`,需要先通过 npm 或 yarn 进行安装。对于新创建的 Vue CLI 项目,默认情况下会自动集成此插件。 ```bash npm install vue-router@next --save ``` 或者使用 Yarn: ```bash yarn add vue-router@next ``` 完成安装之后,在项目的入口文件(通常是 main.js)引入并初始化路由器实例[^1]。 #### 二、基础配置 定义路由表时,需指定路径(path)与对应的组件(component),以及可选参数如重定向(redirect), 别名(alias)等属性。下面是一个简单的例子来展示如何设置基本路由映射关系: ```javascript import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' const routes = [ { path: '/', name: 'home', component: HomeView, }, ] const router = createRouter({ history: createWebHistory(), routes, }) export default router; ``` 这段代码展示了如何创建一个名为 home 的路由,并将其指向 `HomeView` 组件。同时指定了使用的 HTML5 历史模式作为默认导航方式。 #### 三、高级特性 ##### 动态匹配 可以利用占位符实现动态 URL 参数传递给目标组件的功能。例如访问 `/user/john` 可以触发特定逻辑处理 john 用户的信息。 ```javascript { path: '/user/:id', // :id 是一个动态部分 name: 'User', component: UserComponent, } ``` 当用户点击链接跳转至该页面时,可以通过 `$route.params.id` 获取到 id 参数值[^2]。 ##### 导航守卫 Vue Router 提供了几种不同类型的钩子函数用于控制页面间的过渡行为,比如全局前置守卫(beforeEach)、离开当前页面之前执行的操作(canActivate)或是进入某个具体视图之前的验证(checkAuth)[^3]。 ```javascript // 全局前置守卫 router.beforeEach((to, from, next) => { console.log('准备前往:', to.fullPath); next(); }); // 单个路由独享守卫 { path: '/admin', beforeEnter(to, from, next){ if (/* 权限校验 */) { next() } else { next({name:'login'}) } } } // 组件内的守卫 export default { mounted(){ this.$once('hook:beforeRouteLeave',(to,from,next)=>{ const answer = window.confirm('确认要离开吗?') if(answer) next() else next(false) }) } }; ``` 这些机制可以帮助开发者更好地管理和保护应用程序的不同区域免受未授权用户的侵扰。 #### 四、编程式导航 除了常规声明式的 `<router-link>` 外,还可以借助 JavaScript 实现更灵活多变的页面切换效果。常用的方法有 `$router.push()` 和 `$router.replace()` ,分别对应于新增一条新的浏览记录或将现有条目替换为另一位置;另外还有 `$router.go(n)` 支持前进后退操作[^4]。 ```javascript this.$router.push('/about'); // 添加一个新的历史项 this.$router.replace('/contact-us'); // 替换掉当前的历史项而不增加新纪录 this.$router.back(); // 返回上一页 this.$router.forward(); // 前进下一页 ``` 以上就是关于 Vue Router 的一些核心知识点介绍,希望对理解其工作原理有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值