刚刚更新为Angular 1.3,我的“大写”指令不像以前那样有效。
这是我的指示:
.directive('capitalize', function(){
return {
restrict :'A',
require:'ngModel',
link : function(scope, elt, attrs, modelCtrl){
modelCtrl.$parsers.push( function(value){
var up = value.toUpperCase();
modelCtrl.$setViewValue(up);
modelCtrl.$render();
return up;
})
}
}
})
当我在使用ng-maxlength指令验证的输入字段上使用它时,行为很奇怪......
<input capitalize ng-model="c.myField1" ng-maxlength="3" name="myField1" />
如果输入的字符超过3个,则清除输入字段。为什么?
我不明白为什么,你想帮我解决这个问题吗?
显然,在我从1.3rc1更新之前还可以。
这是一个小提琴示例:http://fiddle.jshell.net/dctf1p8e/4/
答案 0 :(得分:0)
迁移时我遇到了类似的问题。我正在追踪这条道路:
https://github.com/angular/angular.js/issues/9295
https://github.com/angular/angular.js/pull/9681
https://github.com/angular/angular.js/issues/9986
基本上,我的猜测是,与$render
或viewValue
一起使用时,setViewValue
方面会有一些问题。
答案 1 :(得分:0)
看来这是$ render()调用中的一个合法错误,它在调用.val()之前检查modelValue是否为空(参见:https://github.com/angular/angular.js/issues/9156)
在修复此问题之前,您只需在附加指令的地方添加ng-model-options="{allowInvalid: true}"
,或者构建一个实现相同结果的自定义指令(可能不必考虑修改可能在工作中)。
如果您担心不必要地使用ng-model-options属性,我建议您定期检查(https://github.com/angular/angular.js/issues/9156)的状态。