我有一个现有的第三方指令,我需要在它们显示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
的顺序?
答案 0 :(得分:2)
您可以设置指令的priority,使其高于或低于第三方指令的优先级:
当在单个DOM元素上定义了多个指令时,有时需要指定应用指令的顺序。优先级用于在调用编译函数之前对指令进行排序。优先级定义为数字。首先编译具有更高数字优先级的指令。预链接功能也按优先级顺序运行,但后链接功能以相反的顺序运行。具有相同优先级的指令的顺序是未定义的。默认优先级为0。