【BUG】vue切换路由,watch内的函数被重复触发多次

rt;

现在有两个页面A和B,其中A页面中有一个watch监听,b页面为空页面,当我切换路由,首先由A页面切换到B页面,再切换回A页面,这时watch内的函数会被触发两次,继续上一步的切换,触发次数会继续叠加,关键点就是我必须要切换回A页面。

假如我新建一个C页面,B页面和C页面之间的切换不会导致watch内的函数触发叠加,只有切换回A页面才会叠加一次,叠加次数无上限。

希望大佬给分析一下原因。

PS:vue版本:2.5.2


初步怀疑跟vue-router有关

阅读 15.5k
3 个回答

首先你的路由应该是用 <kepp-alive> 包裹的,这样路由组件在切换的时候不会销毁。理解这点问题解决就简单了。

确认 A 页面中的 watch 选项中监听的内容是什么,再查看 B 页面是否改变了该内容即可。

如果想保留 <keep-alive> 又不想 A 组件内 watch 在别的页面被执行,可以在函数中对路由属性 $route 做个判断:

    watch: {
        something(newValue, oldValue) {
            if (this.$route.fullPath === 'A组件路由路径') {
                // do something
            }
        }
    }

watch是属于vue的api和vue-router无关,具体用法可以查看官网https://cn.vuejs.org/v2/api/#...
监听路由变化时,路由有两个动作to,from。所以你才会触发两次。watch是写在a页面的,其他页面切换当然不会触发了。。

是不是用了keep-alive?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题