繁体   English   中英

Angular 1.5自定义指令未在本机​​angular指令之前执行

[英]Angular 1.5 custom directive not being executed before native angular directives

我正在从Angular 1.2.17迁移到Angular 1.5.8,并且我注意到我编写的指令不再像以前Angular那样在其他任何指令之前执行了。 1.2.17。 我尝试将指令级别的优先级设置为1500,即使是非常大的值(如9999999999999999999),也没有任何效果。

关于如何解决此问题的任何想法吗?

谢谢

此处提供示例代码: DEMO

var sample = here

要查看它在1.2.x中的工作方式,只需更改角度版本

无需添加DOM事件处理程序来清理输入,而是向ng-model控制器添加$parser来进行清理。

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管道可以避免此问题。

DENK在PLNKR上

从文档中:

$解析器

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

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

-AngularJS ng模型控制器API参考-$ parsers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM