Vue-router 路由守卫

Vue-router 路由守卫

const router = new VueRouter({ ... })

前置路由守卫

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

// to 下一跳路由路径地址

// from 上次路由地址对象

// next 回调钩子函数,next会解析出当前路径是否合法,是否需要路径判断重定向报错等 可以给next传参

//  执行的效果依赖传递的next 参数,如果全部钩子执行完毕,路由状态转为confirmed

//  next 可接受参数形式:false 终端路由跳转,‘/‘(新的路径),{ path: ‘/‘,replace: true, to: ‘‘, name: ‘‘}

//  router.push 中的选项,或者传递报错Error,在router.onError 回调中捕获错误信息

//  确保调用 next 方法,保证 路由路径跳转 resolve

//

    1. fullPath: "/im-manage"
    2. hash: ""
    3. matched: [{…}]
    4. meta: {}
    5. name: "im-manage"
    6. params: {}
    7. path: "/im-manage"
    8. query: {}

//   to   from  对象的全部属性,两者一致! 可以以此参数的值判断 next 传参从而改变路由展示的状态

})

全局路由守卫

router.beforeResolve   同时在所有组件内守卫  ,  异步路由组件被解析之后    beforeResolve 被调用

 

全局后置钩子

router.afterEach((to, from) => {

// to 下一跳路由路径

// from 上一跳地址, 不提供 next也不需要next了,路由导航已经结束

})

路由独享守卫

const router = new VueRouter({

routes: [

{

path: ‘/foo‘,

component: Foo,

           beforeEnter: (to, from, next) => {

//  此处可以限制路由跳转来自哪里,是否是被允许的跳转等

// ...路由路径配置内定义路由地址独享的路由守卫,对单个地址配置路由判断 beforeEnter

}

}

]//  路由数组

})

组件内路由守卫

beforeRouteEnter

beforeRouteUpdate

beforeRouteLeave

//  组件模板

const Foo = {

template: `...`,

beforeRouteEnter (to, from, next) {

// 在渲染该组件的对应路由被 confirm 前调用

// 不!能!获取组件实例 `this`

// 因为当守卫执行前,组件实例还没被创建

//

    1. fullPath: "/im-manage"
    2. hash: ""
    3. matched: [{…}]
    4. meta: {}
    5. name: "im-manage"
    6. params: {}
    7. path: "/im-manage"
    8. query: {}

//   to   from  对象的全部属性,两者一致!

},

beforeRouteUpdate (to, from, next) {

// 在当前路由改变,组件复用的路由路径

// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,

// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。

// 可以访问组件实例 `this`

},

beforeRouteLeave (to, from, next) {

// 导航离开该组件的对应路由时调用

// 可以访问组件实例 `this`

}

}

路由的完整一般解析路程是 酱紫的:

  1. 导航被触发。
  2. 在失活的组件里调用离开守卫。
  3. 调用全局的 beforeEach 守卫。
  4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
  5. 在路由配置里调用 beforeEnter
  6. 解析异步路由组件。
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 beforeResolve 守卫 (2.5+)。
  9. 导航被确认。
  10. 调用全局的 afterEach 钩子。
  11. 触发 DOM 更新。
  12. 用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。

原文地址:https://www.cnblogs.com/the-last/p/11391783.html

时间: 2024-07-31 13:19:18

Vue-router 路由守卫的相关文章

Vue Router 路由守卫:完整的导航解析流程

完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). 5 在路由配置里调用 beforeEnter. 6 解析异步路由组件. 7 在被激活的组件里调用 beforeRouteEnter. 8 调用全局的 beforeResolve 守卫 (2.5+). 9 导航被确认. 10 调用全局的 afterEach 钩子. 11 触发 DOM 更新. 12 用

Vue系列:Vue Router 路由梳理

Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数.查询.通配符 基于 Vue.js 过渡系统的视图过渡效果 细粒度的导航控制 带有自动激活的 CSS class 的链接 HTML5 历史模式或 hash 模式,在 IE9 中自动降级 自定义的滚动条行为 1.动态路由 动态路由,可以将某种模式匹配到的所有路由,并全都映射到同个组件. (通俗点,比如根

04 Vue Router路由管理器

路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成,可以非常方便的用于SPA应用程序的开发. Vue Router包含的功能有: 支持HTML5 历史模式或hash模式 支持嵌套路由 支持路由参数 支持编程式路由 支持命名路由 vue-router的基本使用 基本使用步骤 1.引入相关的库文件 导入vue文件为全局window对象挂载Vue构造函数

vue router路由(三)

当环境搭建及Vue语法与指令都有所了解,该说下router. build目录是打包配置文件 (不建议动) config是vue项目基本配置文件 dist是构建后文件 js 手动创建 (根据需要) node_modules 根据package.json 安装依赖模块 src资源文件,基本文件都会放在这里 app.vue  父组件 main.js 入口文件 static构建好的文件会在这个目录 index.html 主页 1.首先安装路由通过npm: npm install vue-router 在

Vue Router 路由懒加载

将异步组件定义为一个返回Promise 的工厂函数. 函数样式的import()语法,是JavaScript新增加的模块加载语法,提案正处于TC39委员会的第四阶段.它返回一个Promise. 一 路由配置 import Vue from "vue"; import Router from "vue-router"; const Home = () => import(/*webpackChunkName:"home"*/ "./

vue router 路由的学习

新建vue项目的时候 你会发现有个文件夹叫router 这个文件夹下你可以设置一个index.js但是需要引入的两个包 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) 注册路由组件 export default new Router 默认加载这个路由 routes: [] 内部可以写你要配置的路由路径 path: '/' //配置地址 多数用来跳转的地址 nam: 'bac'// 一般用来路由跳转this

Vue Router 路由实现原理实现原理

一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash --- 利用 URL 中的hash("#"); 2.利用 History interface 在HTML5中新增的方法. Vue 中,它是通过 mode 这一参数控制路由的实现模式: const router=new VueRouter({ mode:'history', routes:[

<keep-alive>控制Vue Router路由

只给部分组件加上<keep-alive>啊,在app.vue里这样 <!-- 这里是需要keepalive的 --> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <!-- 这里不会被keepalive --> <router-view v-if="!$route.m

vue全局路由守卫

在main.js里使用方法 router.beforeEach((to,from,next)=>{}) to,是将要跳转的路由, from,是上一个路由 next是个方法,判断to.path 或者 from.path ,如果符合条件,则允许跳转 例子: main.js router.beforeEach((to,from,next)=>{ if(to.path==="/about"){ alert("登陆后方可查看") }else{ next(); }

Vue router 全局路由守卫

记录一下全局路由守卫的使用: 方法一:定义一个数组用于检测与管理需要登录的页面,全局路由守卫配合本地存储判断是否跳转 import Vue from 'vue' import Router from 'vue-router' import store from './../store' import Home from 'components/home/home' // 主页组件 // 其它组件... import Cart from 'components/cart/cart' // 购物车组