Установка $invalid и $error не делает форму недействительной

У меня есть форма, в которой я нахожусь в процессе изменения полей моего телефона с использованием регулярных выражений на модуль ввода intl-tel-input. Я сталкиваюсь с проблемами и путаницей при проверке действительных #.

У меня есть форма с несколькими из этих полей...

<div class="row">
<div class="col-xs-2">
    <label for="cellPhone"
           translate>CONTACT.CELL</label>
</div>
<div class="col-xs-6"
     ng-class="{'has-error': !cellPhoneFocus && forms.contactForm.cellPhone.$invalid && forms.contactForm.cellPhone.$touched }">
    <input type="text" class="form-control intlPhoneInput"
           id="cellPhone" name="cellPhone"
           ng-model="contact.cellPhone.display"
           ng-focus="cellPhoneFocus = true"
           ng-blur="cellPhoneFocus = false; validatePhone($event)">
    <div ng-messages="forms.contactForm.cellPhone.$error"
         ng-show="!cellPhoneFocus && forms.contactForm.cellPhone.$touched"
         class="errorMessages">
        <p ng-message="pattern" translate>
            CRUD.VALID_PHONE</p>
    </div>
</div>

и представить...

<button type="submit" class="btn btn-primary" ng-disabled="forms.contactForm.$invalid" id="saveContactLink" translate>CRUD.SAVE</button>

Тогда в моем контроллере (Typescript)...

//In Constructor
$scope.validatePhone = this.validatePhone.bind(this);

//Outside constructor
private validatePhone(eventObject: any) {
    let thePhoneField = $('#' + eventObject.target.id);
    let phoneIsValid = thePhoneField.intlTelInput("isValidNumber");

    this.$scope.forms.contactForm[eventObject.target.id].$invalid = !phoneIsValid;
    this.$scope.forms.contactForm[eventObject.target.id].$error = {"pattern": !phoneIsValid};
}

Это правильно устанавливает мой класс has-error и сообщение об ошибке, но не устанавливает FORM на недопустимое значение. Я пробовал $ setValidity...

this.$scope.forms.contactForm[eventObject.target.id].$setValidity('pattern', !phoneIsValid);

... но, похоже, ничего не делает.

Как установить в поле значение "Неправильно", показать правильное ng-сообщение (если их больше одного) и убедиться, что форма $errors обновляется, поэтому отправка отключена?

2 ответа

Решение

Оказалось, что $setValidity БЫЛА работала, но наличие setValidity вместе с.$ Invalid и $error вызвало некоторые перекрещенные провода. Закомментируя последние два, правильно включил / отключил кнопку "Отправить" при аннулировании поля.

Вы должны просто иметь возможность установить форму на недопустимую так:

forms.contactForm.$invalid = true
Другие вопросы по тегам