Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度,$formatters和$parser的顺序_Angularjs_Angularjs Directive - Fatal编程技术网

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。哇,以前从来没有听说过明确的优先权,但这就成功了!!!谢谢你,请随意将其作为答案发布@是的,但是添加到前面意味着它将作为最后一个格式化程序执行,因为它们是按相反的顺序执行的。