2014-11-04 72 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)的狀態。