表单$ setValidity返回true无法正常工作

时间:2015-04-22 18:29:53

标签: javascript angularjs

我设置了一个表单来验证服务器端的OnBlur事件。服务器端验证工作正常,并按预期返回错误。但是,一旦我将字段的有效性设置为false,将其设置回true并不会删除$ error消息。 Isn&#t; t $ setValidity是否应该从表单中删除错误?

这是控制器:

angular.module('artists').controller('ArtistsController', ['$scope', '$stateParams', '$location', 'Authentication', 'Artists',
  function($scope, $stateParams, $location, Authentication, Artists) {
    $scope.authentication = Authentication;

    $scope.processForm = function(val){

        var artist = new Artists({
            name: $scope.artistForm.name.$viewValue,
            quote: $scope.artistForm.quote.$viewValue
        });
        artist.$save(function(response) {
          $scope.artistForm.$setValidity(val,true);
        }, function(errorResponse) {
          if(val in errorResponse.data){
            $scope.artistForm.$setValidity(val,false,errorResponse.data[val].message);
          }else{
            $scope.artistForm.$setValidity(val,true);
          }
        });

    };
 }]);

1 个答案:

答案 0 :(得分:0)

在我的情况下,字段设置恢复正​​常,但是当我编辑它时。这是因为$ scope是从不同的控制器加载而不是应用的。因此,您需要使用$apply

$scope.$apply(function(){
     $scope.artistForm.$setValidity(val,true);
})

这是文档: https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope