Reputation: 1436
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
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