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 に答える