angular 1.4.7 ngModel.NgModelController。$ parsers不调用函数

时间:2015-10-09 13:21:53

标签: javascript angularjs angularjs-directive angular-ngmodel

我遇到了ngModel.NgModelController。$解析器的问题。我在例子中解释它: 我为输入字段创建指令。每当我在html中更改此输入中的值时,它应该调用我的注册函数。

此注册函数应始终将您在输入字段中写入的内容更改为' A' char,但修改模型。

html文件

<div ng-app="myApp">
  <form>
    <input ng-model="myval1" somedir/>
  </form>
</div>

js文件

var myApp = angular.module('myApp', []);
myApp.directive("somedir", function(){
  return {
    restrict:'A',
    require: '?ngModel',
    link: function(scope, element, attrs, ngModelController) {
      ngModelController.$parsers.unshift(function(val){
        console.log("i'm here");
        ngModelController.$viewValue ="A";
        ngModelController.$render();
        return val;
      });

    }
  }
});

我准备jsfiddle进行测试:

角度1.2.9:http://jsfiddle.net/hwzxfon3/1/

棱角1.4.7:http://jsfiddle.net/372re41m/1/

在角度1.2.9中,它的工作正确。角度1.4.7存在一些问题。怎么弄它: 专注于输入字段,并按3次相同的按钮,例如&#39; 1&#39 ;. 第一次显示&#39; A&#39;在输入字段和浏览器控制台i'm here中。第二次也一样。但第三次显示&#39; A&#39; +推送char(例如&#39; A1&#39;)而不是在浏览器控制台i'm here中写入,这意味着未调用注册的函数。

请告诉我,我的代码中是否有错误(请写下要更改的内容),或者是有角度的错误(然后我向有角度的小组报告错误)?我在os x(10.10.5)中用最新的chrome和safari测试它。如果它没有问题,请写下来。

1 个答案:

答案 0 :(得分:1)

我向有角度的团队报告此问题。完整的回复是https://github.com/angular/angular.js/issues/13068

简而言之,在类似的情况下,最好使用它:

ngModelController.$viewValue ="A";

然后这个:

{{1}}

为角度1.4.7工作jsfiddle: http://jsfiddle.net/455qdd6p/1/

我需要它来解决我的角度模块https://github.com/uhlryk/angular-dynamic-number