我有一个表单,有一个输入字段和三个复选框.根据选择的复选框,字段上的最大长度需要更改.我有一个像这样定义的输入字段
<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会更改其值.这一切都运行正常,我可以看到$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.
})