Guardia de navegación de vue-router


1. Guardia de navegación

"Navegación" significa que la ruta está cambiando. La protección de navegación proporcionada por vue-router se utiliza principalmente para proteger la navegación saltando o cancelando.

Hay tres tipos de guardias de navegación:

  • Guardia de navegación global
  • Guardia de enrutamiento exclusivo
  • Guardia en el componente

2. Guardia de navegación mundial

1. Guardia mundial de vanguardia

Se puede utilizar router.beforeEachpara registrar un frente global

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

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

El método de guarda recibe tres parámetros:

  • to: Ruta, el objeto de ruta del objetivo a ingresar

  • from: Ruta, el objeto de ruta que la navegación actual está a punto de dejar

  • next: Función, después de llamar a este método, puede ingresar el siguiente gancho. los siguientes parámetros tienen más uso, puede ingresar a la protección de navegación | Estudio detallado del sitio web oficial de Vue Router

Caso de uso, podemos usar beforeEach para completar la modificación del título de la página
Inserte la descripción de la imagen aquí

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

router.beforeEach((to, from, next) => {
    
    
   //从 from 跳转到 to
  // document.title = to.meta.title;
  document.title = to.matched[0].meta.title; //如果有嵌套路由,需要使用这种方式获取 meta中的数据
  next();
})

2. retaguardia mundial

//没有 next 参数
router.afterEach((to, from) => {
    
    
  // ...
})

Tres, guardia exclusiva de enrutamiento

Es la guardia definida directamente en la configuración de enrutamiento.

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

Cuarto, el protector en el componente

Las siguientes protecciones de navegación de enrutamiento se pueden definir directamente en el componente de enrutamiento :

  • 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`
  }
}

5. Información

Navigation Guard | Sitio web oficial de Vue Router

Supongo que te gusta

Origin blog.csdn.net/weixin_43974265/article/details/112799859
Recomendado
Clasificación