在运行时获取模块和控制器|服务|指令名称

时间:2015-05-31 10:24:52

标签: angularjs logging

angular-logger处,我们正在尝试增强$log,但我们希望在角度模块和组件的名称下工作而不做任何更改。为此,我们需要在运行时获取AngularJS 上下文,即模块名称控制器,服务指令< / em>名字。

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 个答案:

答案 0 :(得分:6)

SO上有similar question that I found,但解决方案仅在使用控制器作为语法时才有效。

// 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); 
}]);