Angular 1.3:使用$ parsers清除输入字段

时间:2014-11-04 11:39:13

标签: javascript angularjs angularjs-directive

刚刚更新为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/

2 个答案:

答案 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

基本上,我的猜测是,与$renderviewValue一起使用时,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)的状态。