Angularjs 角度装饰指令
我正在尝试使用Angular的“decorator”功能向某些指令添加功能。假设我的指令名为myDirective。我的代码如下所示: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.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: