Ошибка проверки формы AngularJS при динамическом заполнении ввода

У меня есть следующая форма:
введите здесь описание изображения
Если я нажму на звездочку, ввод будет автоматически заполнен номером нажатой звездочки. (нажав на 3-ю звезду, ввод будет заполнен цифрой «3», как на изображении ниже)

введите здесь описание изображения
Под звездочками введите ng-required="true".

<form name="completeSurveyForm" role="form" novalidate ng-submit="vm.save()">
    <ul class="question-list">
        <li data-ng-repeat="question in vm.survey.questions | orderBy:'conditionalOrderId' track by question.id ">
            <small class="label label-primary pull-right">{{question.questionTypeName}}</small>
            <h3>
                <b>{{$index +1 }}.</b>&nbsp;{{question.questionBody}}
            </h3>
            <hr> <!-- Replace here with directives -->
            <div data-ng-switch="question.questionType">
                <numericrange question="question" data-ng-switch-when="NUMERIC_CHOICE" />
            </div>
        </li>
    </ul>
    <button type="submit" ng-disabled="completeSurveyForm.$invalid " class="btn btn-primary">
        <span data-translate="fqApp.business.form.submit">Submit</span>
    </button>
</form>

И директива numericrange выглядит так:

<div class="row">
    <div class="col-md-2" ng-if="!completed">
        <div>
            <span ng-mouseover="showHovered($event)" ng-mouseleave="clearStars($event)" ng-click="selectStar($event)"
                data-ng-repeat="sym in range(startNonActive(question), question.maxValue, 1)" class="{{question.symbol}} starred-element" value="{{$index}}">
            </span>

            <input type="number" name="{{question.id}}"
                   data-ng-model="question.numericValue"
                   data-ng-value="numberOfSelectedStars" ng-required="true" />
        </div>

    </div>
</div>

Приступаем к проблеме:

Если я нажимаю на звездочку, и ввод динамически заполняется числом, форма не проходит проверку, как показано на изображении ниже:

введите здесь описание изображения

Я вручную пишу число во вводе, форма действительна, и я могу нажать кнопку отправки.

Но почему, если я вручную напишу число во входных данных, форма станет действительной, и я смогу нажать кнопку «Отправить», а если ввод будет заполнен автоматически путем выбора звездочки, форма не будет проверена, и я не смогу нажать на нее. кнопка "отправить"?


person Cristian    schedule 21.06.2017    source источник


Ответы (1)


Пока вы нажимаете на звездочку, вручную делайте грязными при присвоении значения.

angular.forEach($scope.form.$error.required, function(field) {
    field.$setDirty();
})

or

Вы можете использовать метод $setViewValue(value, trigger). Этот метод будет вызываться, когда элемент управления хочет изменить значение представления. См. здесь

person Nilesh Khisadiya    schedule 21.06.2017