2017-01-03 45 views
5

我试图确认不保存表单路由,并且如果用户拒绝,取消更改路由。vue-router:防止参数更改路由

这主要与

beforeRouteLeave: function (to, from, next) { 
         if (!confirm('Leaving form')) next(false); 
        } 

工程问题是与路径参数,像#/form-path?id=5 - 改变id说法不触发beforeRouteLeave

我可以使用哪个钩子来防止参数更改导航?

+1

这似乎是一个未解答的问题[之前](http://stackoverflow.com/q/39900517/1610034)。 – Saurabh

+0

最简单的解决办法是改变任何你想触发该方法成为路由的一部分,因此/ form-path/id – vbranden

+0

@vbranden从第一个答案,不幸的是,它看起来像没有帮助... – Unirgy

回答

1

Dynamic route matching专门设计用于使不同的路径或URL映射到相同的路由或组件。因此,改变参数在技术上不算是离开(或改变)路线,因此beforeRouteLeave没有被解雇。

但是,我建议可以使组件对应于负责检测参数变化的路由。基本上,每当参数发生变化时,记录变化然后将其反转(希望反转速度足够快以至于不被用户察觉),然后要求确认。如果用户确认更改,然后使用您的记录“改变”该更改,但如果用户未确认,则保持原样(不要反转)。

我没有亲自测试过,因此我不保证它能够正常工作,但希望它能清除任何有关应用程序哪部分负责检查更改的混淆。