【问题标题】:Stop destroying vue.js component because there are unsaved changes停止销毁 vue.js 组件,因为有未保存的更改
【发布时间】:2018-06-05 03:19:00
【问题描述】:

我正在使用 Vue.js。我有一个组件,用户可以在其中保存数据。但是有可能用户没有保存数据,他试图导航到其他路线或破坏组件。我想显示一条消息,指出有未保存的数据,用户真的想不保存它。

如果用户说他不想留下未保存的数据,那么我必须停止导航或组件的破坏。我正在使用beforeDestroy 检查是否有未保存的数据并且它可以工作,但我无法停止破坏组件或导航。我尝试使用beforeRouteLeave,但它不起作用。关于如何完成这项工作的任何想法?

【问题讨论】:

标签: vue.js vuejs2 vue-component vue-router vuex


【解决方案1】:

嗯,我明白了,你确定以这种方式使用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)
  }
}

键是next(false)

您需要将false 作为next() 中的参数传递,这样它就不会转发到下一个路由。

只需要检查它是否正确使用。

【讨论】:

  • 是的,使用完全相同的代码。我的路线组件不是我正在执行此操作的组件。我在路由组件的子组件中执行此操作。有什么区别吗?
  • 当您尝试导航离开时,您能否在 beforeRouteLeave 中执行 console.log(to, from); 并分享其价值。
  • 我在路由的组件中添加了beforeRouteLeave,它在那里被调用。以前,当我在子组件中使用它时,它甚至从未被调用过。但是现在,还有一个问题。子组件的beforeDestroy 比路由组件的beforeRouteLeave 执行得晚。所以我的路由组件不知道子组件中是否有未保存的数据。
  • 从文档中我可以看到您可以访问this current vm,因此您可以访问当前组件的所有详细信息并检查是否有未保存的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 2013-08-06
  • 2019-08-25
  • 2017-05-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多