Применяется флаг AngularJs of-dirty

0

В нашей довольно сложной форме я обнаружил, что флаг ng-dirty применяется, когда ничего не изменилось. Первоначально я думал, что проблема заключается в атрибуте placeholder на входном тексте, но теперь даже с удалением этого атрибута флаг все еще устанавливается, когда ничего не было изменено. Это какая-то ошибка? Если да, то каково решение? Проблемные элементы определяются следующим образом:

<div class="form-group" ng-show="isNew">
                <div class="controls">
                    <label class="control-label col-md-3 col-lg-3" title="@Labels.operatorCode">@Labels.operatorCode:</label>
                    <div class="col-md-6 col-lg-6">
                        <input type="text" name="opCode" id="opCode" ng-model="currentOperator.opCode"
                               class="form-control" ng-maxlength="6" ng-show="isNew"
                               ng-required ="isNew" />
                        <div class="field-validation-error" >
                            <span ng-show="form.editOperatorGeneralForm.opCode.$error.required && form.editOperatorGeneralForm.opCode.$dirty">@String.Format(Messages.isRequired, Labels.operatorCode)</span>                        
                            <span ng-show="form.editOperatorGeneralForm.opCode.$error.maxlength && form.editOperatorGeneralForm.opCode.$dirty">@String.Format(Messages.cannotExceed, Labels.operatorCode, "6")</span>
                        </div>
                    </div>
                </div>
            </div>

Сама форма довольно сложна с несколькими вкладками.

Я только вижу эту проблему в браузере Chrome сейчас, он отлично работает в IE (без вопросов).

  • 1
    Можете ли вы проверить, фокусируется ли какой-либо код или стирает поле, используя ngBlur и ngFocus с журналом консоли?
  • 0
    Не могли бы вы уточнить это предложение? Кроме того, как я узнаю, что вызывает событие, если оно срабатывает?
Показать ещё 3 комментария
Теги:
validation

1 ответ

1

Хотя это не отвечает на ваш точный вопрос, я верю, что это решит вашу проблему. Подумайте о том, как сделать свою логику проверки следующим образом.

Посмотреть

<div class="form-group" ng-class="{'has-error':!SomeForm.someValue.$valid && SomeForm.$submitted}">
    <label class="control-label" for="someValue">Some Value</label>
    <input id="someValue"
           name="someValue"
           class="form-control"
           type="text"
           placeholder="(Required)"
           required
           ng-model="vm.temp.someValue"
           ng-maxlength="255"/>
    <div class="help-block" 
            ng-messages="SomeForm.someValue.$error"
            ng-if="SomeForm.$submitted">
        <div ng-messages-include="ui/messages.tpl.html"></div>
    </div>
</div>

контроллер

vm.submit = function(Form, data) {
    if (!Form || Form.$invalid) { return; }
    if (vm.isUnchanged()) { return; }
    someService.save(data).then(function () {
        Form.$setPristine();
    });
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню