4

当我们有一个控制器或 ng-model-controller 我们可以做

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

最后 $digest 被自动调用并验证呈现。如果我想验证模糊的字段怎么办。我愿意

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

并且结果不会在带有 ng-binded 元素的 html 上发生变化,如何呈现这种变化?

4

2 回答 2

4

你必须ctrl.$setValidity('valid', false);范围内调用。$apply

scope.$apply(function(){
    ctrl.$setValidity('valid', false); 
})
于 2013-03-27T06:40:37.993 回答
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;
}

波浪号是一个通用的同级选择器,因此只要您关注您的字段,您的所有错误都将保持隐藏。

于 2013-07-15T13:46:39.870 回答