Подтвердить что ты не робот

Как установить поле ввода в ng-invalid в angularJS

Я хотел бы проверить поле ввода для номеров кредитных карт.

Поле должно оставаться недействительным, пока оно не будет иметь минимальную длину 13. Поскольку пользователь должен иметь возможность заполнить пробел в поле, я удаляю эти пробелы в функции javascript. В этой функции я хотел бы проверить номер кредитной карты (без пробелов) и установить ее на ng-invalid, если минимальная длина меньше 13, а максимальная длина больше 16.

Это должно быть примерно так:

$scope.ccHandler = function() {
   if ($scope.ccNumber == '') {
      document.getElementById("ccProvider").disabled = false;
   }
   $scope.ccNumber = inputCC.value.split(' ').join(''); //entfernt die Leerzeichen aus der Kreditkartennummer vor der übergabe an den Server
   console.log("das ist meine CC: " + $scope.ccNumber);
   isValidCreditCardNumber($scope.ccNumber);
   getCreditCardProvider($scope.ccNumber);
   document.getElementById("ccProvider").disabled = true;
   if ($scope.ccNumber.length < creditCardNumberMinLength || $scope.ccNumber.length > creditCardNumberMaxLength) {
      //$scope.ccNumber.ng-invalid = true;
      console.log("ccNumber ist noch ungültig!");
      //document.getElementById("inputCC").$setValidity("ccNumber", false);
   }
}

Это будет частью XHTML:

<div class="form-group" ng-switch-when="CreditCard">
   <label class="col-xs-3 col-sm-3 control-label">Kreditkartennummer</label> 
   <div class="col-xs-5 col-sm-5 col-md-5">
      <input name="ccNumber" class="form-control" type="text" id="inputCC" ng-change="ccHandler();updateCount()" ng-model="ccNumber" ng-required="true"/>
   </div>
</div>

Как я могу это достичь?

4b9b3361

Ответ 1

Для меня работал следующий код:

$scope.myForm.ccNumber.$setValidity("ccNumber", false);

Ответ 2

Вы можете сделать это с помощью $setValidity. Для этого вам нужно установить атрибут name в <form>.

<form name="myForm">
   <input name="ccNumber" ng-model="ccNumber">
   <span ng-show="myForm.ccNumber.$error.minLength">
      A cc number should be minimum 10 chars
   </span>
</form>

Затем вы можете вручную установить правильность с помощью

$scope.myForm.ccNumber.$setValidity("minLength",$scope.ccNumber.length>=10);

Вот рабочий plnkr: http://plnkr.co/edit/7J326LR194SaoE2TmHuU?p=preview

Ответ 3

В поле ввода вы можете использовать стандартные атрибуты ng-maxlength и ng-minlength.

В Документах AngularJS есть рабочий пример.

 <input type="text" name="lastName" ng-model="user.last" 
     ng-minlength="3" ng-maxlength="10">