Angularjs 角度装饰指令

Angularjs 角度装饰指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在尝试使用Angular的“decorator”功能向某些指令添加功能。假设我的指令名为myDirective。我的代码如下所示: angular.module('app').config([ '$provide', function($provide) { return $provide.decorator('myDirective', [ '$delegate', '$log', function($delegate, $log) { // TOD

我正在尝试使用Angular的“decorator”功能向某些指令添加功能。假设我的指令名为myDirective。我的代码如下所示:

angular.module('app').config([
  '$provide', function($provide) {
    return $provide.decorator('myDirective', [
      '$delegate', '$log', function($delegate, $log) {
        // TODO - It worked!  Do something to modify the behavior

        $log.info("In decorator");
      }
    ]);
  }
]))

我一直收到这样的信息:

Uncaught Error: [$injector:unpr] Unknown provider: myDirectiveProvider from app 
尽我所能,在decorator函数运行时,指令已经注册。如有任何见解,将不胜感激

使用
decorator
方法创建的decorator仅用于服务。它们必须使用
服务
工厂
提供商
创建。见文件

如果要修饰一个指令,可以使用相同的名称创建另一个指令。编译DOM时将使用这两个指令,您可以使用定义编译顺序


或者,如果您能够修改使用您试图修饰的指令的代码,那么您可以创建一个新指令,在其模板中使用原始指令。

本文展示了如何将decorator()与指令一起使用

您只需将“Directive”作为名称的后缀。因此,在我的例子中,我应该这样做

return $provide.decorator('myDirectiveDirective', ['$delegate', '$log', function($delegate, $log) {
    // TODO - It worked!  Do something to modify the behavior
    $log.info("In decorator");

    // Article uses index 0 but I found that index 0 was "window" and index 1 was the directive
    var directive = $delegate[1];
}

我发现,如果将“Directive”作为名称的后缀,则可以将decorator用于指令。因此,在我的示例中,我应该使用$provide.decorator('myDirectiveDirective'…这是不正确的。请参阅@blaster的自我回答,它展示了如何修饰指令。太棒了,你每天都会学到一些东西。看看代码,似乎
$delegate
应该是所有加载模块中名为
myDirective
的所有指令的列表。似乎有可能担心该索引0将是窗口,除非我遗漏了什么。您必须注意,
$delegate
中的顺序将取决于定义的顺序模块和指令,因此您需要保持一致。您可能还希望从列表中删除不需要的指令(
窗口
)-除非你必须这样做,否则我仍然倾向于坚持使用文档化的方式,但如果你必须这样做,这是非常有用的!添加“指令”后缀是至关重要的!这一举措不再有效,angular 1.4.x只允许在提供商和服务中使用装饰器。Juan,你有这个URL吗?也许我很累,但我用装饰器代替了指令!谢谢ee: