2014-11-04 77 views
0

刚更新到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-最大长度指令验证输入字段,该行为是很奇怪......

<input capitalize ng-model="c.myField1" ng-maxlength="3" name="myField1" />  

如果输入3个以上的字符,输入字段将被清除。为什么?

我不明白为什么,你想帮我解决这个问题吗?

很明显,在我从1.3rc1更新之前就没问题。

这里是小提琴例如:http://fiddle.jshell.net/dctf1p8e/4/

+0

我建议只删除'ng-maxlength'并将这个逻辑移到解析器,就像这样:'return up.substring(0,6)'; – incarnate 2014-12-10 17:00:30

回答

0

看来这是在$渲染()调用一个合法的错误,检查,如果modelValue调用之前是空.VAL()(参见:https://github.com/angular/angular.js/issues/9156

直到这个是固定的,你可以只添加ng-model-options="{allowInvalid: true}"哪里您的指令正在追加或构建一个自定义指令,达到相同的结果(可能不需要考虑修复工作)。

如果您担心不必要使用ng-model-options属性,我会建议定期检查(https://github.com/angular/angular.js/issues/9156)的状态。