如何计算每个指令被调用的次数(Angular 1. *)?

时间:2016-11-28 23:49:24

标签: angularjs

我目前正在分析一个巨大的Angular 1.5应用程序。作为本练习的一部分,我正在尝试打印每个指令的列表以及调用它的次数。我想包括自定义指令和内置指令(如ng-if)。

我采用了以不同方式检测Angular源代码的方法(例如,通过向addDirective添加计数器)。但是,到目前为止我尝试的所有内容似乎都不足以计算指令。

是否有人熟悉Angular内部人员?如果是这样,你知道一个很好的方法吗?

1 个答案:

答案 0 :(得分:1)

由于所有指令都可用作Angular服务并在每个指令编译中检索,因此最简单的方法是修补注入器:

app.run(($injector) => {
  $injector._get = $injector.get;

  $injector.get = function (name) {
    var instance = this._get.apply(this, arguments);

    if (/Directive$/.test(name)) {
      var countPerDirectiveName = instance
      .map(ddo => ddo.multiElement ? 0.5 : 1)
      .reduce((countPerDirectiveName, count) => countPerDirectiveName + count)

      console.log(name, countPerDirectiveName);
    };

    return instance;
  }
});

也可以通过修补$compileProvider.directive来控制指令,但是内置指令很难做到这一点,因为它们在{{1}模块之前注册到核心ng模块中可以在用户模块中修补。

相关问题