Angular 1.5自定义指令未在原生角度指令之前执行

时间:2016-10-14 18:24:29

标签: javascript angularjs angularjs-directive angular-directive

我正在从Angular 1.2.17迁移到Angular 1.5.8,并且我注意到我写过的指令在任何其他指令之前不再被执行,因为它曾经是Angular 1.2.17的案例。我试图将我的指令级别的优先级设置为1500,即使是非常大的值,如9999999999999999999但没有效果。

关于如何解决这个问题的任何想法?

谢谢

示例代码可在此处获取:DEMO

var sample = here

要了解它在1.2.x中的工作原理,只需更改角度版本

即可

1 个答案:

答案 0 :(得分:0)

不是添加DOM事件处理程序来清理输入,而是将$parser添加到ng-model控制器以进行清理。

app.directive('nesCleanupInput', [function() {
  return {
    require: "ngModel",
    restrict: 'A',
    priority: 99999999999999999999999999999999999,
    link: function(scope, element,attrs,ngModel) {
      //USE $parsers pipeline
      ngModel.$parsers.push(function nesCleanup (value) {
        let cleanup = value.toUpperCase();
        element.val(cleanup);
        return cleanup;
      });
      /*
      //REMOVE DOM event handler
      element.on('change input keyup', function(event) {
        onChange (event);
      });
      */
});

问题是input指令的DOM事件处理程序正在与nes-cleanup-input指令的DOM事件作斗争。使用$parsers管道可以避免此问题。

DEMO on PLNKR

来自文档:

  

$解析器

     

每当控件从DOM读取值时,作为管道执行的函数数组。函数按数组顺序调用,每个函数都将返回值传递给下一个。最后一个返回值将转发到$validators集合。

     

解析器用于清理/转换$viewValue

- AngularJS ng-model Controller API Reference - $parsers