【发布时间】:2017-12-15 02:36:58
【问题描述】:
我有一个页面,该页面有一个表单,可以在用户离开之前检查用户是否有未保存的更改。
问题在于,即使使用 preventDefault() 并返回 false,用户仍然可以点击离开组件。
有没有办法阻止 ngOnDestroy 或 click 事件的发生?
注意:用户不会转到不同的路线,只是来自同一组件的另一个选项卡。
ngOnDestroy() {
if (this.myForm.dirty) {
let save = confirm('You are about to leave the page with unsaved changes. Do you want to continue?');
if (!save) {
window.event.preventDefault();
return false;
}
}
}
【问题讨论】:
-
您可以禁用导航离开而不保存更改的按钮。 ngOnDestroy 不是防止销毁发生的守卫,它只是在销毁组件之前执行一些逻辑,例如取消订阅 observables 或关闭文件...等。
-
您可能正在寻找身份验证守卫。
-
@torazaburo 我知道守卫只在路线上工作。我注意到用户仍然在同一条路线上,但点击到不同的选项卡。
-
@RaedKhalaf 我不认为禁用导航按钮在视觉上看起来不错。如果用户愿意,我宁愿让他们选择继续。
-
好的,那就不要禁用它,当用户点击导航离开而不保存的按钮时,只需添加'discard = confirm("Do you want to discard changes")',如果discard是真正的导航走开,其他的不要导航走开。
标签: javascript angular