我在控制器中有一个表格。如果有未保存的更改,我想警告用户离开时丢失它们。
首先我试过:
$scope.$on('$locationChangeStart', function (event, next, current) {
if ($scope.settingsForm.$dirty) {
event.preventDefault();
$scope.theUserWantsToLeave(function (result) {
if (result === "LEAVE") {
$location.path($location.url(next).hash());
$scope.$apply();
}
});
}
上面的代码在该行中引发错误$scope.$apply();
:
Error: $digest already in progress
删除此行只是不执行重定向。
什么是正确的方法?
===
编辑:
我尝试的其他选项是仅在需要取消重定向时才做出反应来处理它:
$scope.$on('$locationChangeStart', function (event, next, current) {
if ($scope.settingsForm.$dirty) {
$scope.theUserWantsToLeave(function (result) {
if (result === "STAY_HERE") {
event.preventDefault();
}
});
}
});
以这种方式做事时,用户界面正在中断(我看到对话框然后它消失了)。好像我在处理事件时不能调用另一个异步方法。