在app.vue中,修改this.$route.meta,watch设置了deep: true,没有监听到变化?
在app.vue中,修改this.$route.meta,watch设置了deep: true,没有监听到变化,页面也没有渲染?
// App.vue中
watch: {
$route: {
deep: true,
handler(to, from) {
console.log(6666666666, to); // 执行modify方法无法打印
}
}
},
methods: {
modify() {
console.log(777777);
this.$route.meta.navName = "修改";
// this.$set(this.$route.meta, "navName", "修改"); // 用这个也无效
},
}
如何才能监听到meta的更新?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
手动给 this.$route.meta 添加双向监听
读源码可知
$route
其实就是根组件$root
的_route
属性, 他并没有定义在data里, 而是调用Vue.util.defineReactive(this, '_route', this._router.history.current)
, 该方法只会监听_route
这个对象的最表层, 也就是_route
被赋值=xxx, 才会触发响应式监听被watch到.相反,定义在data里的数据在组件被实例化时
在
initData
时会被深度地响应式化