I have an UnsavedChangesModal
as a component that needs to be launched when the user tries to leave the page when he has unsaved changes in the input fields (I have three input fields in the page).
components: { UnsavedChangesModal }, mounted() { window.onbeforeunload = ''; }, methods: { alertChanges() { } }
One solution is to use the beforeunload event in combination with a "dirty" flag, which only triggers the prompt if it's really relevant. var isDirty = function() { return false; } window.
<KeepAlive> is a built-in component that allows us to conditionally cache component instances when dynamically switching between multiple components.
You can force-reload components by adding :key="$route. fullPath".
Vue $emit is a function that lets us emit, or send, custom events from a child component to its parent. In a standard Vue flow, it is the best way to trigger certain events.
Assuming you're using vue-router (and you probably should be), then you'll want to use the beforeRouteLeave
guard. The documentation even gives an example of this exact situation:
beforeRouteLeave (to, from , next) { const answer = window.confirm('Do you really want to leave? you have unsaved changes!') if (answer) { next() } else { next(false) } }
That can be added directly right on your component:
components: { ... }, mounted: { ... } methods: { ... }, beforeRouteLeave (to, from, next) { ... }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With