2017-02-06 90 views
-1

我正在使用Vue.js與vue-router,並且對'beforeRouteLeave'導航警衛有疑問。當用戶單擊「取消」按鈕時(如果存在未保存的更改,我可以放置一個確認對話框),我正在使用它來對我的ProductDetail組件中的產品對象進行髒檢查。只要用戶點擊取消按鈕,它就會正常工作,取消按鈕會將路線更改爲'/ product/list'(來自'/ product/detail')。但是,如果用戶在瀏覽器的地址欄中直接輸入「/ product/list」,則不會調用它。這是一個小小的麻煩,而不是一個表演阻止者,但我只是想知道是否有某種方法可以解決這個問題,並讓它的行爲與鏈接或按鈕點擊一樣?beforeRouteLeave的侷限性?

按要求進一步澄清: 在有問題的組件中,單擊取消按鈕調用this.$router.push({name:'product-list'}),它在路由器配置中使用路徑'/ product/list'定義。發生這種情況時,在路由改變之前成功調用了guard beforeRouteLeave。但是,如果用戶直接在地址欄中輸入「/ product/list」,並以這種方式更改路線,則繞過組件的「beforeRouteLeave」。

+0

您能否解釋一下問題 - 當用戶直接訪問'/ product/list'時,數據是不是呈現?這些數據取決於另一個? –

回答

1

嘗試window.onbeforeunloadhttps://jsfiddle.net/z11fe07p/578/如果您想防止保留鏈接而不保存更改。

window.onbeforeunload = function(){ 
    return "Are you sure you want to close the window?"; 
}