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

标签 angularjs angularjs-scope

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

 <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/

相关文章:

javascript - 使用奇数和偶数逻辑执行 2 次 ng-repeat 循环

javascript - $resource删除方法不起作用

javascript - 如何访问 angularjs Controller 中的变量?

javascript - 访问嵌入的 ng-repeat 内的指令范围

unit-testing - 如何使用 mock $httpBackend 来测试错误分支

AngularJS 延迟(超时)循环中的每个 http 调用

javascript - Angular Material 类型错误: $mdThemingProvider.背景调色板不是一个函数

javascript - Angularjs 下拉列表选择值

javascript - AngularJS 将服务数组变量绑定(bind)到 Controller 范围

javascript - Angular : Update model from directive