正在应用AngularJs ng-dirty标志

时间:2015-12-03 22:13:59

标签: html angularjs validation

在我们相当复杂的形式中,我发现在没有实际改变的情况下应用了ng-dirty标志。我原本以为问题出在输入文本的占位符属性中,但现在即使删除了这个属性,当没有任何更改时仍然会设置标志。这是某种bug吗?如果是,那么解决方案是什么?有问题的元素定义如下



<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>
&#13;
&#13;
&#13;

表格本身非常复杂,有几个标签。

我现在只在Chrome浏览器中看到此问题,它在IE中运行正常(毫无疑问)。

1 个答案:

答案 0 :(得分: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();
    });
};