2017-12-22 8 views
1

Ich verwende . Ich habe eine Komponente, wo der Benutzer Daten speichern kann. Es ist jedoch möglich, dass der Benutzer die Daten nicht gespeichert hat und er versucht, zu einer anderen Route zu navigieren oder die Komponente zu zerstören. Ich möchte eine Nachricht anzeigen, dass nicht gespeicherte Daten vorhanden sind und der Benutzer sie wirklich ungespeichert lassen möchte.Stoppen Sie die Zerstörung der vue.js-Komponente, weil es nicht gespeicherte Änderungen gibt

Wenn der Benutzer sagt, dass er die ungesicherten Daten nicht verlassen will, muss ich die Navigation oder die Zerstörung der Komponente stoppen. Ich verwende beforeDestroy, um zu überprüfen, ob nicht gespeicherte Daten vorhanden sind, und es funktioniert, aber ich kann nicht aufhören, die Komponente oder die Navigation zu zerstören. Ich habe versucht mit beforeRouteLeave, aber es funktioniert nicht. Irgendwelche Ideen, wie das funktioniert?

+0

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

+0

@DakshMiglani es geht nicht nur nur 'stoppen Benutzer' ist über Stoppen, wenn der Benutzer zur nächsten Komponente weiterleitet, bitte lesen Sie die Frage richtig und schlagen Sie eine Antwort vor. –

Antwort

1

Hmm ich sehe, sind Sie sicher mit beforeRouteLeave auf diese Weise

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

Schlüssel ist nächste (false)

Sie müssen es in next()false als Argument übergeben, so wird nicht zur nächsten Route weitergeleitet.

müssen nur überprüfen, ob es richtig verwendet wird.

+0

ja, mit genau dem gleichen Code. Die Komponente meiner Route ist nicht die Komponente, in der ich das mache. Ich mache es in Kind-Komponente der Route-Komponente. Macht es einen Unterschied? – Rohanil

+0

können Sie 'console.log (zu, von);' innerhalb von beforeRouteLeave tun, wenn Sie versuchen, weg zu navigieren und seinen Wert zu teilen. –

+0

Ich habe 'beforeRouteLeave' in die Komponente der Route eingefügt und sie wird dort aufgerufen. Zuvor wurde es nie aufgerufen, als ich es in der Kindkomponente hatte. Aber jetzt gibt es ein anderes Problem. Die 'beforeDestroy' der Kindkomponente wird später als' beforeRouteLeave' der routen Komponente ausgeführt. Daher weiß meine Routenkomponente nicht, ob in der untergeordneten Komponente nicht gespeicherte Daten vorhanden sind. – Rohanil

Verwandte Themen