多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# watch监听路由重复加载 > 项目要求,列表页跳转到一个内容页,每个打开的内容页之间切换还要做到点击就刷新数据, 之前的解决方式就是用watch去监听路由,但是监听路由后,第一次进入无效,关闭后打开就会成倍的去请求watch里面的方法。应该是框架的原因,一直有缓存的router的信息在,所以还会去请求相同的东西!归根结底就是vue的生命周期不够了解 ## 解决办法使用“导航守卫” ``` //next()是必须加的 beforeRouteEnter (to, from, next) { console.log('beforeRouteEnter被调用:在渲染该组件的对应路由被 confirm 前调用') // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` 因为当守卫执行前,组件实例还没被创建 // 可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。 next(vm => { // 通过 `vm` 访问组件实例 console.log(vm) }) }, // beforeRouteEnter 是支持给 next 传递回调的唯一守卫。 // 对于 beforeRouteUpdate 和 beforeRouteLeave 来说,this 已经可用了,所以不支持传递回调,因为没有必要了。` beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 `this` console.log('beforeRouteUpdate被调用:在当前路由改变,但是该组件被复用时调用')` next() }, beforeRouteLeave (to, from, next) {`** // 导航离开该组件的对应路由时调用` // 可以访问组件实例 `this`` const answer = window.confirm('是否确认离开当前页面')` if (answer) { console.log('beforeRouteLeave被调用:导航离开该组件的对应路由时调用')` next() } else { next(false) } }, ```