Sur ma page principale, j'ai des listes déroulantes qui montrent v-show=show
en cliquant sur le lien @click = "show=!show"
et je veux définir show=false
lorsque je change de route. Conseillez-moi s'il vous plaît comment réaliser cette chose.
Configurez un observateur sur le $route
de votre composant comme ceci:
watch:{
$route (to, from){
this.show = false;
}
}
Ceci observe les changements de route et, lorsqu’il est modifié, définit show
sur false
Si vous utilisez la version 2.2.0, une autre option est disponible pour détecter les modifications dans $ routes.
Pour réagir aux changements de paramètres dans le même composant, vous pouvez simplement regarder l'objet $ route:
const User = {
template: '...',
watch: {
'$route' (to, from) {
// react to route changes...
}
}
}
Ou utilisez la protection beforeRouteUpdate introduite dans la version 2.2:
const User = {
template: '...',
beforeRouteUpdate (to, from, next) {
// react to route changes...
// don't forget to call next()
}
}
Référence: https://router.vuejs.org/en/essentials/dynamic-matching.html
Si vous souhaitez savoir comment procéder dans TypeScript, voici la solution
@Watch('$route', { immediate: true, deep: true })
onUrlChange(newVal: any) {
// Some action
}
Et oui, comme mentionné par @Coops ci-dessous, n'oubliez pas d'inclure
import { Prop, Watch } from "vue-property-decorator";
Watcher avec l'option deep n'a pas fonctionné pour moi.
Au lieu de cela, j'utilise un hook updated () () qui est exécuté à chaque fois que les données du composant changent. Il suffit de l’utiliser comme vous le faites avec monté () .
mounted() {
/* to be executed when mounted */
},
updated() {
console.log(this.$route)
}
Pour votre référence, visitez le documentation .
Les réponses ci-dessus sont préférables, mais pour être complet, lorsque vous êtes dans un composant, vous pouvez accéder à l'objet d'historique à l'intérieur du VueRouter avec: this. $ Router.history. Cela signifie que nous pouvons écouter les changements avec:
this.$router.listen((newLocation) =>{console.log(newLocation);})
Je pense que cela est surtout utile quand on l'utilise avec cela. $ Router.currentRoute.path Vous pouvez vérifier de quoi je parle en plaçant un debugger
instructions dans votre code et commencez à jouer avec la console Chrome DevTools.