Angular,$ formatters和$ parsers的顺序

时间:2016-03-03 17:22:09

标签: angularjs angularjs-directive

我有一个现有的第三方指令,我需要在它们显示resp之前修改模型和视图值。保存到模型中。由于我想避免修改外部代码,我实现了一个附加指令,该指令通过属性设置,即将通过$formatters$parsers管道修改数据。

基本上是这样的:

app.directive('myModifyingDirective', function() {
    return {
        require: 'ngModel',
        restrict: 'A',
        link: function(scope, element, attrs, ngModelController) {
            ngModelController.$formatters.push(function(modelValue) {
                return 'modified_' + modelValue;
            });
            // similar for $parsers
        }
    };
});

标记看起来像:

<third-party-directive my-modifying-directive ng-model='data'></third-party-directive>`

问题是,third-party-directive也会对$formatters产生影响,最后,third-party-directives格式化程序是$formatters中的最后一个条目数组,因此在my-modifying-directive之前执行。

但是,我需要先执行my-modifying-directive

我是否有任何机制可以影响$parsers的顺序?

1 个答案:

答案 0 :(得分:2)

您可以设置指令的priority,使其高于或低于第三方指令的优先级:

  

当在单个DOM元素上定义了多个指令时,有时需要指定应用指令的顺序。优先级用于在调用编译函数之前对指令进行排序。优先级定义为数字。首先编译具有更高数字优先级的指令。预链接功能也按优先级顺序运行,但后链接功能以相反的顺序运行。具有相同优先级的指令的顺序是未定义的。默认优先级为0。