angularjs – 为什么不重新评估ng-maxlength?

我有一个表单,有一个输入字段和三个复选框.根据选择的复选框,字段上的最大长度需要更改.我有一个像这样定义的输入字段

 <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. 
})
点赞