Angular Validation $解析器

时间:2013-03-27 06:35:52

标签: validation angularjs

当我们有控制器或ng-model-controller时,我们可以做到

ctrl.$parsers.push(function(viewValue){ 
    ctrl.$setValidity('valid', true); 
});

并最终自动调用$ digest并进行验证呈现。 如果我想在模糊上验证字段该怎么办?我做了

element.blur(function(){ 
    [validations]
    ctrl.$setValidity('valid', false); 
})

并且结果不会在带有ng-binded元素的html上更改,如何呈现此更改?

2 个答案:

答案 0 :(得分:4)

您必须在scope.$apply

中致电ctrl.$setValidity('valid', false);
scope.$apply(function(){
    ctrl.$setValidity('valid', false); 
})

答案 1 :(得分:2)

或者更好的是,为了避免进一步的问题,使用CSS来解决这个问题。我们假设以下代码:

<textarea ng-model="description" ng-minlength="50"></textarea>
<span class="error" ng-show="myform.$error.minlength">Too short!</span>
<span class="error" ng-show="myform.$error.someOtherValidation">Err!</span>

当您开始输入时,Angular会启动验证,并出现错误(有时候会出现这种情况,但更常见的情况是,但事实并非如此)。

你可以做的是为了不搞乱Angular的内部,是一些CSS魔术:

textarea:focus ~ .error {
  display:none;
}

波浪号是一般的兄弟选择器,所以只要你的田地集中,你的所有错误都会隐藏。