在 SvelteKit 中,如果未保存用户状态,是否有办法取消 popstate 事件?

2023-12-07

我有一个允许用户编辑其状态的组件。这会触发一个notSaved多变的。我有一个beforeunload事件处理程序来处理重新加载和退出页面以提醒用户保存状态,但是使用 SvelteKit,使用浏览器中的后退按钮似乎不会触发beforeunload事件。我也有一个popstate事件处理程序,因为单击后退按钮时会触发该事件处理程序,但我不知道如何防止window.history改变如果notSaved变量为真。

SvelteKit 有没有办法触发Changes you made may not be saved.弹出窗口类似于在beforeunload按下后退或前进按钮时发生事件?


您可以使用beforeNavigate函数被通知导航意图以便可能阻止它,例如:

<script>
    import { beforeNavigate } from '$app/navigation';

    let unsavedWork = false;
    let value = 0;

    beforeNavigate(({ from, to, cancel }) => {
        if (unsaved) {
            cancel();
            showUnsavedWorkPopup();
        }
    });

    function onChange() {
        ...
        unsavedWork = true;
    }

    async function save() {
        await ...
        unsavedWork = false;
    }
</script>

<input type="number" bind:value on:change={onChange}>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SvelteKit 中,如果未保存用户状态,是否有办法取消 popstate 事件? 的相关文章

随机推荐