Получить имена модулей и контроллеров | службы | директивы во время выполнения

В angular-logger мы пытаемся улучшить $log, но мы хотели бы работать от имени модуля и компонента angular без изменения. Для этого нам нужно получить контекст AngularJS во время выполнения, то есть имя модуля и имя контроллера, службы или директивы.

app.module("SampleModule").
   controller("ControllerOne", function ($log) {
      $log.debug("I am ready!")
   }).
   controller("ControllerTwo", function ($log) {
      $log.debug("I am ready!")
   });

Значение по умолчанию $log:

> I am ready!
> I am ready!

Если мы получим имя модуля и контроллера во время выполнения, то с помощью расширенного $log мы можем получить более богатый результат:

> SampleModule.ControllerOne: I am ready!
> SampleModule.ControllerTwo: I am ready!

Лучшим вариантом будет его получение без изменений в коде контроллера. Возможно, есть способ получить некоторую метаинформацию об объектах, которые получили инъекцию зависимости $log?

Любые предложения?

Ответы

Ответ 1

Был найден аналогичный вопрос, который я нашел на SO, но решение работает только при использовании контроллера в качестве синтаксиса.

// a simple route with controller as syntax
$routeProvider.when(
    '/myRoute', 
    { 
        templateUrl: '/myRoute', 
        controller: 'ControllerOne as vm' 
    }
);

// controller
app.controller("ControllerOne", ['$log', function ControllerOne($log) {
    var vm = this;
    $log.log(vm.constructor.name); 
}]);