Decorator sample with Hack

by yoorek

HTML

<div ng-app="app">
    <button ng-click="alert('Clicked!')">click Me!</button>
</div>

JavaScript

var changeDirectiveFunction = function ($delegate) {
    var ngClick = $delegate[0],
        compile = ngClick.compile;

    ngClick.compile = function (element, attrs, transclude) {
        console.log('ngClick compile');
        return compile(element, attrs, transclude);
    };

    return $delegate;
};


angular.module('app', [])
    .config(function ($provide) {

    $provide.decorator('ngClickDirective', changeDirectiveFunction);
})
    .hackDirective('ngClick', changeDirectiveFunction)

    .run(function ($rootScope, $window) {
    $rootScope.alert = function (message) {
        $window.alert(message);
    };
});

// special hack

var originalModule = angular.module;

angular.module = function () {
    var module = originalModule.apply(this, arguments);
    module.hackDirective = function (name, fn) {
        module.config(function ($provide) {
            $provide.decorator(name + 'Directive', fn);
        });
    };
    return module;
};