Answers:
在组件中的上设置观察者,$route
如下所示:
watch:{
$route (to, from){
this.show = false;
}
}
这观察路线的变化,并在更改时设置show
为false
如果您使用的是v2.2.0,那么还有另一个选项可用于检测$ routes中的更改。
要对同一组件中的参数更改做出反应,您只需查看$ 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
beforeRouteUpdate
仅在声明该方法的视图上起作用,而不在任何子组件上
以防万一有人在打字稿中寻找操作方法,这是解决方案
@Watch('$route', { immediate: true, deep: true })
onUrlChange(newVal: Route) {
// Some action
}
是的,正如下面@Coops所述,请不要忘记添加
import { Watch } from 'vue-property-decorator';
编辑: Alcalyn提出了使用Route类型而不是使用任何类型的一个很好的观点
import { Watch } from 'vue-property-decorator';
import { Route } from 'vue-router';
import { Prop, Watch } from "vue-property-decorator";
any
类型,你可能需要使用该接口Route
从import { Route } from 'vue-router';
具有深层选项的Watcher对我不起作用。
相反,我使用了updated()生命周期挂钩,该挂钩在每次组件数据更改时都会执行。就像使用mount()一样使用它。
mounted() {
/* to be executed when mounted */
},
updated() {
console.log(this.$route)
}
供您参考,请访问文档。
$route: function(to, from) {
,如果你想支持旧的浏览器,而不是使用巴贝尔。