指令装饰器

有时你可能需要指令中的其他功能。你可以修改指令的行为方式,而不是重写(复制)指令。

装饰器将在$ inject 阶段执行。

为此,请为你的模块提供 .config。该指令名为 myDirective,因此你必须配置 myDirectiveDirective。 (这是一个有角度的约定[读取提供者])。

此示例将更改指令的 templateUrl:

angular.module('myApp').config(function($provide){
        $provide.decorator('myDirectiveDirective', function($delegate){
             var directive = $delegate[0]; // this is the actual delegated, your directive
             directive.templateUrl = 'newTemplate.html'; // you change the directive template
        return $delegate;
    })
});

此示例在单击时向指令元素添加 onClick 事件,这在编译阶段发生。

angular.module('myApp').config(function ($provide) {
        $provide.decorator('myDirectiveTwoDirective', function ($delegate) {
            var directive = $delegate[0];
            var link = directive.link; // this is directive link phase
            directive.compile = function () { // change the compile of that directive
                return function (scope, element, attrs) {
                    link.apply(this, arguments); // apply this at the link phase
                    element.on('click', function(){ // when add an onclick that log hello when the directive is clicked.
                            console.log('hello!');
                    }); 
                };
            };
            return $delegate;
        });

    });

类似的方法可以用于提供者和服务。