vue如何移除watch监听?
vue 如何移除watct监听
·
从列表进入详情页,携带参数,列表页为了保持在固定的位置,用了keep-alive
包裹,这样的话进入详情页就需要watch
监听路由来获取参数
watch: {
$route: {
handler() {
// do some thing
},
immediate: true // 立即监听
}
}
然而问题来了,
因为监听的是当前路由,
返回上一页时也会触发watch
,
此时会丢失参数,
可能导致业务逻辑报错。
我的第一反应是在handler
函数体中做判断,
不执行对应代码。
一顿操作,目的达到了,
但是watch
依然会触发。
作为一个有节操的程序猿,
是不允许这样的,
于是就想着如何移除watch
就像document.removeListenr
这样,安排!!!
data() {
return {
watchRoute: () => {}
}
}
// 定义监听函数
created() {
this.watchRoute = this.$watch(
// 此处被监听的对象必须是一个函数,否则会报错
() => {
return this.$route
},
() => {
// do some thing
}, { immediate: true })
}
destroyed() {
// 页面销毁时调用监听函数,就可以移除watch
this.watchRoute()
}
此处插播另外一个知识点:keep-alive
的组件,不会执行destroyed
,并且created
函数只会执行一次。
要分别用activated
(激活)和deactivated
(失活)函数代替。
更多推荐
已为社区贡献1条内容
所有评论(0)