vuejs vue route matched change attribute vue.js vuejs2 vue-router

vue.js - route - Vuejs: evento sobre cambio de ruta



vue title attribute (5)

Configure un watcher en la $route en su componente de esta manera:

watch:{ $route (to, from){ this.show = false; } }

Esto observa los cambios de ruta y cuando se cambia, los conjuntos se show como falsos

En mi página principal tengo @click = "show=!show" desplegables que muestran v-show=show haciendo clic en el enlace @click = "show=!show" y quiero configurar show=false cuando cambio la ruta. Avísame por favor cómo realizar esto.


El vigilante con la opción profunda no funcionó para mí.

En cambio, uso el enlace de ciclo de vida actualizado () que se ejecuta cada vez que cambian los datos del componente. Solo úsalo como lo haces con montado () .

mounted() { /* to be executed when mounted */ }, updated() { console.log(this.$route) }

Para su referencia, visite la documentation .


Las respuestas anteriores son mejores, pero solo para completar, cuando está en un componente puede acceder al objeto de historial dentro del VueRouter con: this. $ Router.history. Eso significa que podemos escuchar los cambios con:

this.$router.listen((newLocation) =>{console.log(newLocation);})

Creo que esto es principalmente útil cuando se usa junto con este. $ Router.currentRoute.path Puede verificar de qué estoy hablando acerca de colocar un debugger

instrucciones en su código y comience a jugar con la consola Chrome DevTools.


Si está utilizando v2.2.0, entonces hay una opción más disponible para detectar cambios en $ routes.

Para reaccionar a los cambios de parámetros en el mismo componente, simplemente puede mirar el objeto $ route:

const User = { template: ''...'', watch: { ''$route'' (to, from) { // react to route changes... } } }

O utilice el protector beforeRouteUpdate presentado en 2.2:

const User = { template: ''...'', beforeRouteUpdate (to, from, next) { // react to route changes... // don''t forget to call next() } }

Referencia: https://router.vuejs.org/en/essentials/dynamic-matching.html


Solo en caso de que alguien esté buscando cómo hacerlo en mecanografiado, esta es la solución

@Watch(''$route'', { immediate: true, deep: true }) onUrlChange(newVal: any) { // Some action }