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

pdo*_*ide 15 logging angularjs

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

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

默认$log输出:

> I am ready!
> I am ready!
Run Code Online (Sandbox Code Playgroud)

如果我们可以在运行时获取模块和控制器名称,那么使用增强版$log我们可以获得更丰富的输出:

> SampleModule.ControllerOne: I am ready!
> SampleModule.ControllerTwo: I am ready!
Run Code Online (Sandbox Code Playgroud)

最好的选择是在不更改控制器代码的情况下获取它.也许有办法获得一些关于收到$ log依赖注入的实体的元信息?

有什么建议?

Abh*_*ain 6

在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); 
}]);
Run Code Online (Sandbox Code Playgroud)

  • 数组注释用于解决仅在缩小期间发生的问题.在这种情况下,它没有附加值,只会有助于隐藏相关信息.[su·per·flu·ous,adj.:_超出足够或必需的数量_](http://www.thefreedictionary.com/superfluous) (2认同)