Daan van Hulst
Daan van Hulst

Reputation: 1436

Angularjs: check if debug has been enabled in $log decorator

I created a decorator for $log in Angular. The $logProvider has the function debugEnabled, but from what I understand I only have access to the $log service. Is it possible to access the function 'debugEnabled()' of the $logProvider in a decorator somehow?

    $provide.decorator( '$log', [ "$delegate", function( $delegate ) {

        // Saving the original
        var _$log = (function( $delegate ) {
                return {
                    log   : $delegate.log,
                    info  : $delegate.info,
                    warn  : $delegate.warn,
                    debug : $delegate.debug,
                    error : $delegate.error
                };
            })( $delegate ),
        }]);

Upvotes: 0

Views: 543

Answers (1)

Ed_
Ed_

Reputation: 19098

debugEnabled() is a method on the $logProvider itself. Remember that $logProvider is what is responsible for generating the $log service (via its $get function).

What decorators do is intercept the object that is returned from $get and allow you to add methods etc.

So to modify decorator behaviour based on whether debug is enabled, you simply need to inject $logProvider into your .config block and your decorator will have a closure over it:

angular.module('example', [])

.config( function ($provide, $logProvider){
  $provide.decorator('$log', function ( $delegate ){
    if ($logProvider.debugEnabled())
     // do something
    else 
     // do something else

    return $delegate;
  }
})

Upvotes: 2

Related Questions