Angularjs 角度,$formatters和$parser的顺序
我有一个现有的第三方指令,我需要修改模型和视图值,然后再显示它们。保存到模型中。为了避免修改外部代码,我实现了一个通过属性设置的附加指令,该指令将通过Angularjs 角度,$formatters和$parser的顺序,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个现有的第三方指令,我需要修改模型和视图值,然后再显示它们。保存到模型中。为了避免修改外部代码,我实现了一个通过属性设置的附加指令,该指令将通过$formatters和$parsers管道修改数据 基本上是这样的: app.directive('myModifyingDirective', function() { return { require: 'ngModel', restrict: 'A', link: function(s
$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>`
`
问题是,第三方指令
也对$formatters
起作用,最后,第三方指令
的格式化程序是$formatters
数组中的最后一个条目,因此在我的修改指令
之前执行
但是,我要求首先执行我的修改指令
是否有任何机制可以影响$parsers
的顺序?您可以设置指令的优先级,使其高于或低于第三方指令的优先级:
当在单个DOM元素上定义了多个指令时,有时需要指定应用这些指令的顺序。优先级用于在调用指令的编译函数之前对指令进行排序。优先级定义为一个数字。首先编译具有更高数字优先级的指令。前链接功能也按优先级顺序运行,但后链接功能按相反顺序运行。具有相同优先级的指令顺序未定义。默认优先级为0
您是否尝试过在指令上设置较高/较低的优先级?您是否尝试过
ngModelController.$formatters.unshift(函数(modelValue){return'modified'+modelValue;})代码>?这会将格式化程序添加到数组的前面。@SunilD。哇,以前从来没有听说过明确的优先权,但这就成功了!!!谢谢你,请随意将其作为答案发布@是的,但是添加到前面意味着它将作为最后一个格式化程序执行,因为它们是按相反的顺序执行的。