私のメインページで私はリンクv-show=show
をクリックすることによって@click = "show=!show"
を示すドロップダウンを持っています、そして私がルートを変えるとき私はshow=false
を設定したいです。これを実現する方法を教えてください。
このように、コンポーネントの$route
に ウォッチャー を設定します。
watch:{
$route (to, from){
this.show = false;
}
}
これはルートの変更を監視し、変更されたときはshow
をfalseに設定します
あなたがv2.2.0を使っているならば、$ routesの変更を検出するために利用可能なもう一つのオプションがあります。
同じコンポーネント内のparamsの変更に反応するためには、単純に$ routeオブジェクトを見ることができます。
const User = {
template: '...',
watch: {
'$route' (to, from) {
// react to route changes...
}
}
}
または、2.2で導入されたbeforeRouteUpdateガードを使用します。
const User = {
template: '...',
beforeRouteUpdate (to, from, next) {
// react to route changes...
// don't forget to call next()
}
}
参照: https://router.vuejs.org/en/essentials/dynamic-matching.html
万が一誰かがTypeScriptでそれを実行する方法を探しているのであれば、これが解決策です。
@Watch('$route', { immediate: true, deep: true })
onUrlChange(newVal: any) {
// Some action
}
上記の応答はより優れていますが、完全を期すために、コンポーネントに入っているときはVueRouter内のhistoryオブジェクトにthis:$ router.historyでアクセスできます。それは私たちが変化を聞くことができることを意味します。
this.$router.listen((newLocation) =>{console.log(newLocation);})
これは、これと一緒に使用すると主に役立つと思います。$ router.currentRoute.path debugger
を配置することについて私が話していることを確認できます。
コードを編集して、Chrome DevToolsコンソールで遊び始めましょう。
深いオプションを持つウォッチャーは私のために働きませんでした。
代わりに、コンポーネントのデータが変更されるたびに実行されるupdated()ライフサイクルフックを使用します。 mounted()と同じように使用してください。
mounted() {
/* to be executed when mounted */
},
updated() {
console.log(this.$route)
}
参考までに、 ドキュメント をご覧ください。