Comme nous le savons, pour réagir aux changements de paramètres dans le même composant, nous utilisons beforeRouteUpdate
hook ou observons $route
.
regarder $ route:
const User = {
template: '...',
watch: {
'$route' (to, from) {
// react to route changes...
}
}
}
beforeRouteUpdate Méthode:
const User = {
template: '...',
beforeRouteUpdate (to, from, next) {
// react to route changes...
next()
}
}
Quelle est la différence entre ces deux? si les deux sont identiques, alors pourquoi le routeur vue introduit-t-il beforeRouteUpdate
?
Dans la documentation on beforeRouteUpdate
:
appelé lorsque la route qui restitue ce composant a changé, mais que ce composant est réutilisé dans la nouvelle route. Par exemple, pour une route avec des paramètres dynamiques
/foo/:id
, lorsque nous naviguons entre/foo/1
et/foo/2
, la même instance de composantFoo
sera réutilisée et ce hook sera appelé à ce moment-là.
Certes, la documentation n’est pas claire sur le fait que le hook s'appelle before la valeur de l’objet $route
change réellement. C'est la différence entre ce crochet de navigation et la configuration d'un observateur sur $route
, qui sera appelé après, la valeur de $route
a changé.
En utilisant la garde de navigation beforeRouteUpdate
, vous pouvez déterminer si vous souhaitez ou non empêcher le changement de route (en n'appelant pas next()
) ou accéder entièrement à un autre itinéraire (en transmettant une valeur de route différente comme next('/foo')
, next({ name: 'foo' })
, etc.).
Voici un exemple fiddle qui montre quand ces fonctions sont appelées.
Comme @thanksd l'a dit, beforeRouteUpdate
est comme un garde. En regardant, vous ne pouvez pas empêcher la route d’agir, mais avec beforeRouteUpdate
vous pouvez le faire avec la fonction next
. Par exemple, vous pouvez attendre jusqu'à ce que vos données soient récupérées, puis passez au composant.
Vous trouverez plus d'informations dans la documentation de vue-router Récupération de données .