2017-12-22 24 views
1

私はvuejsを使用しています。ユーザーがデータを保存できるコンポーネントがあります。しかし、ユーザーがデータを保存しておらず、他のルートに移動しようとしたり、コンポーネントを破棄したりする可能性があります。保存されていないデータがあるというメッセージを表示したいと思います。保存されていない変更があるため、vue.jsコンポーネントの破棄を停止します

ユーザーが保存していないデータを残したくないと言う場合、ナビゲーションまたはコンポーネントの破棄を停止する必要があります。私はbeforeDestroyを使用して、保存されていないデータがあるかどうかを確認していますが、動作しますが、コンポーネントやナビゲーションの破壊を止めることはできません。私はbeforeRouteLeaveを使ってみましたが動作しません。どのようにこの作品を作るためのアイデア?私が見

+0

http://stackoverflow.com/questions/40425682/disable-changes-you-made-may-not-be-saved-pop-up-window –

+0

@DakshMiglaniは、「停止ユーザー」についてのみではない次のコンポーネントへのユーザールートを停止するときは、質問を正しく読んで回答を提示してください。 –

答えて

1

うーん、あなたは確か

beforeRouteLeave (to, from , next) { 
    const answer = window.confirm('Do you really want to leave? you have unsaved changes!') 
    if (answer) { 
    next() 
    } else { 
    next(false) 
    } 
} 

キーがある。このようにしbeforeRouteLeaveを使用している次の(偽)あなたはそれをnext()に引数としてfalseを渡す必要があり

次のルートに転送しません。

正しく使用されているかどうかを確認するだけです。

+0

確かに、まったく同じコードを使用しています。私のルートのコンポーネントは、私がこれをやっているコンポーネントではありません。私はルートコンポーネントの子コンポーネントでそれをやっています。違いはありますか? – Rohanil

+0

あなたが離れてナビゲートしてその値を共有しようとすると、beforeRouteLeaveの内部で 'console.log(to、from);を実行できます。 –

+0

ルートのコンポーネントに 'beforeRouteLeave'を追加しました。そこに呼び出されています。以前は、それが子コンポーネントにあったときに呼び出されることはありませんでした。しかし今、別の問題があります。子コンポーネントのbeforeDestroyは、ルートコンポーネントのbeforeRouteLeaveよりも遅く実行されています。だから私のルートコンポーネントは、子コンポーネントに保存されていないデータがあるかどうかわかりません。 – Rohanil

関連する問題