Angularjs ng-minlength валидация не работает, форма все еще представляется

Я пытаюсь отправить форму только при успешной проверке. проверка работоспособности требуется, но не работает для ng-minlength

ввод формы недействителен, но форма все еще отправляется.

<form name="myForm" ng-submit="count = count + 1" ng-init="count=0" ng-app>
 <div class="control-group" ng-class="{error: myForm.mobile.$invalid}">
        <label class="control-label" for="mobile">Mobile</label>
        <div class="controls">
            <input type="text" name="mobile" placeholder="07XXXXXXXXX" ng-model="mobile" ng-minlength="11"  required />
            <span ng-show="myForm.mobile.$error.required" class="help-inline">Required</span>
            <span ng-show="myForm.mobile.$error.minlength" class="help-inline">Mobile number should be minimum 11 character starting from 07</span>           
        </div>
    </div>

     <div class="control-group">
        <div class="controls">                       
            <input  class="btn" type="submit" value ="submit" />
        </div>

         count: {{count}}<br />

<tt>myForm.$invalid = {{myForm.$invalid}}</tt><br/>
    </div>
</form>

http://jsfiddle.net/pMMke/9/

что я делаю неправильно.

Я не хочу использовать метод отключения кнопки отправки.

Ответ 1

Это то, что вы делаете неправильно: вы смешиваете два понятия, Angular валидаторы и HTML5-валидаторы.

Валидаторы требуемые HTML5, например, заявляют, что:

При наличии, он указывает, что перед отправкой формы должно быть заполнено поле ввода.

Итак, если вы попытаетесь отправить форму, в которой есть вход с этим атрибутом, она покажет сообщение, объясняющее это пользователю, и это предотвратит отправку формы. Это поведение, которое вы хотите. Почему не работает для ng-minlength? Поскольку ng-minlength является валидатором Angular (вы можете сказать, потому что он начинается с ng -), и он не добавляет никакого специального поведения в форму. Он просто задает вход, где он находится недействительным (и, следовательно, форма), и позволяет вам решить, что с ним делать.

У вас есть опция: вы можете использовать валидатор шаблон HTML5, для указания поля требуется не менее 11 символов. Он хотел бы это сделать:

<input type="text" pattern=".{11,}">

Поэтому, когда вы отправляете форму, содержащую этот ввод, она не будет отправлена, если пользователь вводит менее 11 символов.

Но так как это мы, и вы уже используете валидатор шаблон, вы можете использовать регулярное выражение в своем полном потенциале и определить что-то вроде:

<input type="text" pattern="07[0-9]{9}" />

который будет допускать только 11 символов, начинающихся с "07" и содержащих только цифры. Я изменил вашу скрипту, чтобы показать вам, как она будет работать: http://jsfiddle.net/helara/w35SQ/

Ответ 2

Я ошибочно использовал ngMaxlength="12" ngMinlength="6" вместо ng-minlength="6" ng-maxlength="12", теперь он отлично работает.

Ответ 3

Оба ng-minlength и mg-maxlength работают в AngularJS. Я тестировал это в версии AngularJS 1.3.
Обязательно используйте novalidate с помощью <form>, чтобы отключить собственную проверку браузера.

Ответ 4

Это должно работать:

Чтобы ввести номер мобильного телефона

ng-show="myForm.mobile.$touched && myForm.mobile.$error.required"

Для минимальной длины

ng-show="myForm.mobile.$touched && myForm.mobile.$error.minlength"

Для максимальной длины

ng-show="myForm.mobile.$touched && myForm.mobile.$error.maxlength" 

Ответ 5

У меня такая же проблема, и я думаю, что вы можете только отключить кнопку или проигнорировать введенное значение самостоятельно. Вы также можете проверить свойство $valid в своем контроллере и игнорировать значение... Это не так приятно, но я не нашел другого пути.

Ответ 6

Эта работа для меня ребята

    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input ng-minlength="11" class="mdl-textfield__input" type="text" name="cpf" id="cpf" ng-model="avaliacao.cpf" ng-required="true" ng-pattern="/^\d+$/">
        <label class="mdl-textfield__label" for="cpf">CPF *</label>
    </div>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.required && myForm.cpf.$dirty">Field Required</p>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.pattern">Only numbers</p>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.minlength">Min 11 Chars</p>