2013-05-22 12 views
50

Jak mogę sprawdzić, czy dane sterowanie wejściowe jest puste? Wiem, że na polu znajduje się właściwość $pristine, która mówi, że jeśli dane pole jest początkowo puste, a co jeśli ktoś wypełni pole i ponownie wyrzuci całą treść?Sprawdź, czy pole wejściowe jest puste

Myślę, że powyższa funkcja jest niezbędna, ponieważ jest ważna dla poinformowania użytkownika, że ​​pole jest wymagane.

Każdy pomysł zostanie doceniony!

Odpowiedz

83

Quite simple:

<input ng-model="somefield"> 
<span ng-show="!somefield.length">Please enter something!</span> 
<span ng-show="somefield.length">Good boy!</span> 

Można również użyć ng-hide="somefield.length" zamiast ng-show="!somefield.length" jeśli to brzmi bardziej naturalnie dla ciebie.


Lepszym rozwiązaniem może być naprawdę skorzystać z form abilities of Angular:

<form name="myform"> 
    <input name="myfield" ng-model="somefield" ng-minlength="5" required> 
    <span ng-show="myform.myfield.$error.required">Please enter something!</span> 
    <span ng-show="!myform.myfield.$error.required">Good boy!</span> 
</form> 

Updated Plnkr here.

+7

Witaj, właściwość length jest dostępna tylko wtedy, gdy pole jest ważne. Na przykład ustawiam 'minlength' na 5 i wprowadzam tylko trzy znaki, wtedy własność length nie będzie dostępna. – vivek

+4

@vivekpoddar [Angular powinien być wybaczający] (http://docs.angularjs.org/guide/expression) o tym jednak, więc gdy 'length' nie jest dostępny, to zwraca wartość' undefined', która jest interpretowana jako false. Jeśli próbujesz dokonać sprawdzenia w kontrolerze, tj. W JavaScript, a nie w wyrażeniu kątowym, to jest to kolejna historia, w której musisz sam sobie poradzić. Zauważ, że istnieje również atrybut 'required', który może zrobić dokładnie to, czego potrzebujesz: http://docs.angularjs.org/api/ng.directive:input.text – Supr

+0

@vivekpoddar Zaktualizowany przez' wymagany' przykład. – Supr

13

Nawet nie trzeba się zmierzyć długość łańcucha. A! operator może rozwiązać dla Ciebie wszystko. Pamiętaj zawsze:! (pusty string) = true (niektóre string) = False

Więc można napisać:

<input ng-model="somefield"> 
<span ng-show="!somefield">Sorry, the field is empty!</span> 
<span ng-hide="!somefield">Thanks. Successfully validated!</span> 
+2

To boli mój mózg !! ** Ten sam ** sprawdzić w obu przypadkach? –

+5

Tak, Jonatas wydaje się zagmatwany, ponieważ jest to ten sam czek, ale w rzeczywistości są one różne. pierwszy to ng-show, a drugi to ng-hide. Więc są odwrotni! :-) możesz także użyć zarówno ng-show, jak i różnych czeków. jeden z nie (!) i drugi bez (!). –

+0

Rozumiem, dziękuję za wyjaśnienia. –

5

Innym podejściem jest za pomocą wyrażenia regularnego, jak pokazano poniżej, można użyć pusty wzór wyrażenie regularne i osiągnąć takie same pomocą ng wzorca

HTML:

<body ng-app="app" ng-controller="formController"> 
<form name="myform"> 
<input name="myfield" ng-model="somefield" ng-minlength="5" ng-pattern="mypattern" required> 
<span ng-show="myform.myfield.$error.pattern">Please enter!</span> 
<span ng-show="!myform.myfield.$error.pattern">great!</span> 
</form> 

Kontroler: @formController:

  var App = angular.module('app', []); 
     App.controller('formController', function ($scope) {    
      $scope.mypattern = /^\s*$/g; 
     }); 
0

Aby sprawdzić auto pole wyboru, jeśli pole wejściowe nie jest pusta.

<md-content> 
      <md-checkbox ng-checked="myField.length"> Other </md-checkbox> 
      <input ng-model="myField" placeholder="Please Specify" type="text"> 
</md-content> 
Powiązane problemy