我被困在可能听起来像JS异步问题的东西上。我正在开发一个AngularJS应用程序,当用户键入任何表单数据但移动到另一个页面而不保存时,应用程序可以询问他/她是否要在重定向到下一页之前保存它。 但是,当保存成功完成后,应用程序仍在询问用户是否要保存它( bug ),因为条件语句
if($scope[attrs["name"]].$dirty)
即使我在save()函数中调用$ setPristine,也是如此。
这是我的指示:
app.directive('formConfirmation', function($modal){
return function($scope, attrs){
$scope.$on('$locationChangeStart', function(event, next, current){
if($scope[attrs["name"]].$dirty){ // the problem happens right here
/* open modal for confirmation */
/* and checks whether the user wants to save the dirty form */
modalInstance.result.then(function(answer){
if(answer){
$scope.save();
}
});
}
});
}
});
我的控制器的保存功能是这样的:
$scope.save = function(){
/* calling a service from a factory to save the record... */
utils.save($scope.record, function(data){
// saving was successfully completed
$scope.myForm.$setPristine(); // $dirty value is set to false
$location.path('/main');
}, function(dataError){
// saving has failed
});
}
我的HTML:
<form name="myForm" ng-controller="myCtrl" form-confirmation>
<!-- Form fields here -->
</form>
我想当我更改save函数内的路径位置时,会再次触发$ locationChangeStart事件。但是当我第二次检查我的表单的$ dirty属性时,即使在我的save()函数中调用$ setPristine之后,它的值仍然返回true。
我不确定发生了什么,我正在学习js和angularJS,但这种异步的javascript架构总是一个挑战。任何帮助或指导将不胜感激。