13

我正在尝试使用 Angular 的“装饰器”功能为某些指令添加功能。假设我的指令的名称是 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 

尽我所能,指令在装饰器函数运行时已经注册。任何见解将不胜感激!

4

2 回答 2

21

这篇文章展示了实际上如何将 decorator() 与指令一起使用。

您只需包含“指令”作为名称的后缀。因此,在我的例子中,我应该一直在做

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];
}

http://angular-tips.com/blog/2013/09/experiment-decorating-directives/

于 2013-10-16T18:59:11.120 回答
1

decorator使用该方法创建的装饰器仅用于服务。必须使用 、 或servicefactory创建它们。providervalue请参阅此处的文档。

如果你想装饰一个指令,你可以制作另一个同名的指令。编译 DOM 时将使用这两个指令,您可以使用priority定义编译顺序。

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

于 2013-10-16T17:05:17.467 回答