2013-03-27 155 views
4

當我們有一個控制器或NG-模型的控制器,我們可以做

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

,並在最後$摘要被自動調用和驗證渲染。 如果我想驗證模糊區域,該怎麼辦。和我做

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

和結果不會改變HTML元素ng綁定,如何呈現此更改?

回答

3

你必須內scope.$apply

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

或者更好的調用ctrl.$setValidity('valid', false);,以避免問題進一步上,使用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> 

當你開始打字,角開始驗證,並出現錯誤(這有時是需要的,但更多的時候,它不是)。

你可以爲了不弄亂角的內部是什麼,是一些CSS魔法:

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

波浪號是一般兄弟選擇,所以只要你有你的領域集中你所有的錯誤都將保持隱藏。

+0

存在問題。當你有錯誤時,你不想在用戶選擇輸入時隱藏它。修正後應該消失。 – Frizi 2013-08-02 16:27:26

+0

這一直是AngularJS遇到的問題。我不希望我的用戶在第二次接觸表單時發生錯誤。所以,Tomaz的建議對我來說是個好主意。但是,弗裏齊引起了很好的關注。所以我理想的解決方案是在用戶模糊之前不會顯示錯誤。然後,當他們回來修復它,不斷顯示錯誤,直到它實際解決。也許添加一個模糊的類,表明它失敗了一次? 「以前失敗」。那麼,即使在關注時,使用CSS來顯示錯誤? – Justin 2013-10-02 22:07:24