我有一个表单,它有一个输入字段和三个复选框。根据选中的复选框,字段上的最大长度需要更改。我有一个这样定义的输入字段
<input placeholder="ID" type="text" id="form_ID" name="searchId" autofocus
data-ng-model="vm.searchCriteria.searchId" data-ng-required="vm.isSearchIdRequired"
data-ng-minlength="1" data-ng-maxlength="{{searchIdMaxLength}}"
data-ng-class="{'input-error': vm.isSearchIdValid}">
和复选框之一
<input type="checkbox" id="checkbox1" class="hidden-field"
data-ng-model="vm.searchCriteria.searchIdInSrId" data-ng-checked="vm.searchCriteria.searchIdInSrId"
data-ng-change="processSearchIdOptionsChange()">
因此,每次用户更改选中/选中哪个复选框时
processSearchIdOptionsChange
被调用,和 searchIdMaxLength
改变它的值(value)。这一切正常,我可以看到 $scope 上的值正在更改。但是,我的初始最大长度仍在应用中。达到初始最大字符数后会弹出以下错误。为什么?<span class="error" data-ng-show="(searchForm.$dirty && searchForm.searchId.$error.maxlength)">Too long!</span>
最佳答案
这是 ng-maxlength 的预期行为。从来源验证:https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js?source=c#L523
该值仅解析一次并缓存:
var maxlength = int(attr.ngMaxlength);
如果您想观察更改,您需要创建自己的指令,该指令使用类似
scope.$watch(attr.namespaceMaxLength,function(){
// clear old validator. Add new one.
})
关于angularjs - 为什么不重新评估 ng-maxlength?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146922/