输入填充动态时,AngularJS表单验证失败

Cri*_*ian 1 html javascript angularjs angular-directive angular-validation

我有以下表格:
在此输入图像描述
如果我点击星号,输入将自动填充所点击的星号.(单击第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>
Run Code Online (Sandbox Code Playgroud)

而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>
Run Code Online (Sandbox Code Playgroud)

进入问题:

如果我点击一个星号并且输入用数字动态填充,则表单无法验证,如下图所示:

在此输入图像描述

我手动在输入中写一个数字,表单有效,我可以点击提交按钮.

但是为什么如果我在输入中手动编写一个数字,表单就会生效,我可以单击"提交"按钮,如果通过选择一个星形自动填充输入,表单不会验证,我也无法点击'提交'按钮?

Nil*_*iya 6

单击星形时,在分配值时手动使其变脏.

angular.forEach($scope.form.$error.required, function(field) {
    field.$setDirty();
})
Run Code Online (Sandbox Code Playgroud)

要么

你可以使用$setViewValue(value, trigger)方法.当控件想要更改视图值时,将调用此方法.请参考这里