如何在Vue中离开页面之前警告用户未保存的更改

Bar*_*n23 10 javascript vue.js vuex

我有UnsavedChangesModal一个组件需要在用户在输入字段中有未保存的更改时尝试离开页面时启动(我在页面中有三个输入字段).

components: {
    UnsavedChangesModal
},
mounted() {
    window.onbeforeunload = '';
},
methods: {
   alertChanges() {

   }
}
Run Code Online (Sandbox Code Playgroud)

jps*_*der 23

假设你正在使用vue-router(你可能应该这样),那么你将需要使用beforeRouteLeave后卫.文档甚至给出了这种确切情况的一个例子:

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

这可以直接添加到您的组件上:

components: { ... },
mounted: { ... }
methods: { ... },
beforeRouteLeave (to, from, next) { ... }
Run Code Online (Sandbox Code Playgroud)

  • 如果其他人读到这篇文章并想要一个即使关闭页面也能工作的 Vue 示例。[参见这个答案](/sf/answers/3958615251/) (4认同)
  • 如果您不使用 vue router,那么您只需使用以下命令绑定到窗口:`window.onbeforeunload = () => '您确定要离开吗?'` (2认同)

Dir*_*ble 13

这些答案仅涵盖 Vue 中的导航。如果用户刷新页面或导航到不同的站点,则不会被捕获。所以你还需要类似的东西:

window.onbeforeunload = () => (this.unsavedChanges ? true : null);
Run Code Online (Sandbox Code Playgroud)

  • 但是我们将如何在 vue.js 中使用它。你能举个例子吗? (2认同)
  • 如果其他人读到这篇文章并想要一个有效的 Vue 示例[请参阅此答案](/sf/answers/3958615251/)。 (2认同)

小智 5

您正在使用vue-router吗?我会调查导航卫士。我牢记它们,但是我自己还没有使用它们。这是关于它们的文档:https : //router.vuejs.org/guide/advanced/navigation-guards.html

  • 如果我们不想使用 vue-router 怎么办? (2认同)