2017-01-03 64 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沒有被解僱。

但是,我建議可以使組件對應於負責檢測參數變化的路由。基本上,每當參數發生變化時,記錄變化然後將其反轉(希望反轉速度足夠快以至於不被用戶察覺),然後要求確認。如果用戶確認更改,然後使用您的記錄「改變」該更改,但如果用戶未確認,則保持原樣(不要反轉)。

我沒有親自測試過,因此我不保證它能夠正常工作,但希望它能清除任何有關應用程序哪部分負責檢查更改的混淆。