vue中的导航守卫

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <script>
    /*
      全局前置守卫
        beforeEach((to, from, next) => {})
      全局解析守卫
        beforeResolve((to, from, next) => {})
      全局后置钩子
        afterEach((to, from) => {})

        router.全局守卫((to, from, [next]) => {})

      路由独享守卫
        beforeEnter((to, from, next) => {})

        在配置路由是写在路由配置对象上的
        routes: [
          {
            path: ‘/‘,
            component: index,
            beforeEnter (to, from, next) => {

            }
          }
        ]

      组件内守卫
        beforeRouteEnter((to, from, next) => {})
        beforeRouteUpdate((to, from, next) => {})
        beforeRouteLeave((to, from, next) => {})

        组件内守卫写在组件内和组件生周期钩子函数的写法相同
        const component = {
          template: ``,
          beforeRouteEnter (() => {}),
          beforeRouteUpdate (() => {}),
          beforeRouteLeave(() => {})
        }
    */  

    /*
      三种页面跳转
        1 直接刷新页面
          beforeEach
          / beforeEnter
          组件中的beforeRouteEnter
          全局解析守卫
          全局后置守卫
          路由跳转结束后
          开始组件生命周期

          创建前
          创建后
          挂载前
          挂载后

        2 路由改变但组件不变
          全局前置守卫触发
          组件内beforeRouteUpdate触发
          beforeResolve
          afterEach
        3 路由改变组件改变
          组件内beforeRouteLeave
          beforeEach
          to组件的路由独享守卫触发
          to组件的beforeRouteEnter触发
          beforeResolve
          afterEach

          to组件创建
          to组件挂载前
          from组件销毁
          to组件挂载

      beforeRouteLeave
      beforEach

      beforeRouteUpdate
      beforeEnter 

      beforeRouteEnter
      beforeResolve
      afterEach

      beforeRouteEnter中的this指向window,因为在其触发时组件还没有被创建
    */
  </script>

  <div id="app">
    <nav>
      <router-link to="/">首页</router-link>
      <router-link to="/page">子页面</router-link>
    </nav>
    <router-view></router-view>
  </div>

  <script src="../vue.js"></script>
  <script src="../vue-router.js"></script>
  <script>
    const Index = {
      template: `
        <div>首页</div>
      `,
      beforeCreate () {
        console.log(‘首页组件创建前‘)
      },
      created () {
        console.log(‘首页组件创建后‘)
      },
      beforeMount() {
        console.log(‘首页组件挂在前‘)
      },
      mounted () {
        console.log(‘首页组件挂在后‘)
      },
      beforeDestroy () {
        console.log(‘首页销毁前‘)
      },
      destroyed () {
        console.log(‘首页销毁后‘)
      },
      beforeRouteEnter(to, from, next){
        console.log(‘首页组件的enter守卫‘)
        console.log(this)
        next((vm)=>{
          console.log(vm)
        })
      },
      beforeRouteUpdate(to, from, next){
        console.log(‘首页组件的update守卫‘)
        console.log(this)
        next()
      },
      beforeRouteLeave(to, from, next){
        console.log(‘首页组件的leave守卫‘)
        console.log(this)
        next()
      },
    }

    const Page = {
      template: `
        <div>子页面</div>
      `,
      beforeCreate () {
        console.log(‘page组件创建前‘)
      },
      created () {
        console.log(‘page组件创建后‘)
      },
      beforeMount() {
        console.log(‘page组件挂在前‘)
      },
      mounted () {
        console.log(‘page组件挂在后‘)
      },
      beforeRouteEnter(to, from, next){
        console.log(‘page组件的enter守卫‘)
      },
      beforeRouteUpdate(to, from, next){
        console.log(‘page组件的update守卫‘)
        next()
      },
      beforeRouteLeave(to, from, next){
        console.log(‘page组件的leave守卫‘)
        next()
      },
    }

    const router = new VueRouter({
      routes: [
        {
          path: ‘/‘,
          component: Index,
          beforeEnter (to, from, next) {
            console.log(‘/ 路由的独享守卫触发‘)
            next()
          }
        }, {
          path: ‘/page‘,
          component: Page,
          beforeEnter (to, from, next) {
            console.log(‘/page 路由的独享守卫触发‘)
            next()
          }
        }
      ]
    })

    router.beforeEach((to, from, next) => {
      console.log(‘全局前置守卫触发‘)
      next()
    })
    router.beforeResolve((to, from, next) => {
      console.log(‘全局解析守卫触发‘)
      next()
    })
    router.afterEach((to, from) => {
      console.log(‘全局后置守卫触发‘)
    })

    const app = new Vue({
      el: "#app",
      router
    })

  </script>
</body>
</html>

原文地址:https://www.cnblogs.com/bao2333/p/10278920.html

时间: 2024-08-30 13:25:43

vue中的导航守卫的相关文章

Vue中的导航守卫(路由守卫)

当做Vue-cli项目的时候感觉在路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-router 提供的 beforeEach可以方便地实现全局导航守卫(navigation-guards).组件内部的导航守卫函数使用相同,只是函数名称不同(beforeRouteEnter .beforeRouteUpdate(2.2 新增) .beforeRouteLeave). 官方文档地址:https://router.vuejs.org/zh-cn/advanced/navigat

vue之路由导航守卫-全局前置守卫

一.使用方式 全局前置守卫用于在路由配置生效之前进行一些动作,可以使用 router.beforeEach 注册一个全局前置守卫: const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... }) 参数: to: Route: 即将要进入的目标 路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子.执行效

八、Vue Router 进阶-导航守卫

导航守卫 所谓的导航守卫,就是路由的钩子函数.主要用来通过跳转或取消导航.导航守卫分三种:全局.路由独享.组件级的. 注意:参数或查询的改变并不会触发进入和离开的导航守卫.可以通过watch监听$route对象,或使用beforeRouteUpdate的组件内守卫. 全局前置守卫 进入路由之前的钩子函数,接受next函数,在此可以阻止进入路由或跳转到指定路由. <script> const router = new VueRouter({ ... }); // 接收三个参数:to为目标路由对象

nuxtjs中使用路由守卫

在vue中的路由守卫一般是来验证token失效什么的,当然也可以设置权限啦,在nuxtjs中如何使用路由守卫呢,话不多说,直接上代码 在plugins目录下简历route.js export default ({ app }) => { app.router.afterEach((to, from) => { console.log(to.path) }) } 然后在 nuxt.config.js中添加配置plugins即可 plugins: [ '@/plugins/element-ui',

vue-router导航守卫(router.beforeEach())的使用

好久没写一些东西了,总是感觉有啥缺少的.~~~~恰好碰到最近在写一个移动端项目,遇到了如何使同一个链接在不同条件下跳转到不同路由组件问题,譬如大家经常看到手机中没登录跳转登录页,登陆后跳转个人信息页等.废话不多说了,直接上图: 这是没登录状态,点击下面mine按钮跳转至登录页 这个是我登录了自己的账号后,再次点击mine按钮会跳转至个人信息页面 好了,看到了这个效果今天咱们来实现下 实现方法 我们点击下面mine按钮其实是路由跳转,所以我们需要在跳转路由之前做一个判断,根据不同的条件让这个链接跳

Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave详解

Vue导航守卫以我自己的理解就是监听页面进入,修改,和离开的功能.每个守卫接受三个参数 to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子.执行效果依赖 next 方法的调用参数. next(): 进行管道中的下一个钩子.如果全部钩子执行完了,则导航的状态就是 confirmed (确认的). next(false): 中断当前的导航.如果浏览器的 URL 改变了(可能是用

Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]

前言 说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过,且Vue的生命周期在面试中也算是比较高频的考点,那么该如何回答这类问题,让人有眼前一亮的感觉呢... 前端进阶积累.公众号.GitHub Vue-Router导航守卫: 有的时候,我们需要通过路由来进行一些操作,比如最常见的登录权限验证,当用户满足条件时,才让其进入导航,否则就取消跳转,并跳到登录页面让其登录. 为此我们有很多种方法

vue导航守卫和axios拦截器的区别

在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器. 一.什么是导航守卫? vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.(在路由跳转时触发) 我们主要介绍的是可以验证用户登录状态的全局前置守卫,当一个导航触发时,全局前置守卫按照创建顺序调用.守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于等待中. const router = new VueRouter({ ... }) router.beforeEach(

vue导航守卫

三部分 router(VueRouter实例)守卫 -- 全局路由守卫 router守卫 -- 路由守卫 component守卫 -- 组件守卫 const router = new Router({}) router.beforeEach(function (to,from,next) {} // export default router router.beforeEach(function (to,from,next) { // console.log(to,from) if(to.nam