【问题标题】:angular 1.4.7 ngModel.NgModelController.$parsers not call functionangular 1.4.7 ngModel.NgModelController.$parsers 不调用函数
【发布时间】:2015-10-09 13:21:52
【问题描述】:

我对 ngModel.NgModelController.$parsers 有疑问。我在例子中解释它: 我为输入字段创建指令。每次我在 html 中更改此输入中的值时,它都应该调用我的注册函数。

并且这个注册的函数应该总是将你在输入字段中写的内容更改为'A'字符,但修改模型。

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/

在 Angular 1.2.9 中它可以正常工作。在 Angular 1.4.7 中存在一些问题。如何获得它: 专注于输入字段,然后按 3 次相同的按钮,例如'1'。 第一次在输入字段和浏览器控制台i'm here 中显示“A”。第二次也一样。但第三次显示'A'+推送字符(例如'A1')并且没有写入浏览器控制台i'm here,这意味着没有调用注册函数。

请告诉我,我的代码中是否有错误(请写下要更改的内容),还是 Angular 中的错误(然后我向 Angular 团队报告错误)?我在 os x (10.10.5) 的最新 chrome 和 safari 中对其进行了测试。如果它对你有用,请也写这个。

【问题讨论】:

  • 我在 windows 8.1/Chrome 版本 45.0.2454.101 m - 两个小提琴对我来说都一样。
  • 在 Firefox 开发者版 43.0a2 中相同
  • #sirrocco 感谢您的帮助,请再次检查,因为我在小提琴中修复了 angular 1.4.7 的外部链接
  • 确实按照您的解释进行。但是你想做什么?

标签: javascript angularjs angularjs-directive angular-ngmodel


【解决方案1】:

我将此问题报告给 Angular 团队。完整的回复在那里https://github.com/angular/angular.js/issues/13068

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

ngModelController.$setViewValue("A");

然后这个:

ngModelController.$viewValue ="A";

为 Angular 1.4.7 工作的 jsfiddle: http://jsfiddle.net/455qdd6p/1/

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

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多