【发布时间】:2017-10-04 01:45:56
【问题描述】:
我有一个表单,我在上面设置了一个事件监听器,看起来像这样
setExitCheck = () => {
this.$scope.$on('$destroy', (e) => {
if ($('#compForm').hasClass('ng-dirty')) {
if (window.confirm('You may have unsaved changes! Press ok to continue, or press cancel to go back and save your work.') === false) {
e.preventDefault();
}
}
});
};
这个想法是,如果表单是脏的并且有ng-dirty类,并且用户尝试发起一个stateChange并且$destroy事件被调用;让他们有机会留在页面上以保存他们的更改,或者按 OK 并继续他们的 stateChange,但代价是失去他们的工作。
eventListener 正常关闭,当按下Ok 或Cancel 时,if 语句可以正确识别。问题是,e.preventDefault 似乎并没有阻止 $destroy 循环或 stateChange 的发生。
如何防止 $destroy 循环发生?我是不是走错了路?
【问题讨论】:
-
您可以挂钩状态更改,并防止这种情况发生,而不是防止组件被破坏。
标签: javascript jquery angularjs typescript