我目前正在分析一个巨大的Angular 1.5应用程序。作为本练习的一部分,我正在尝试打印每个指令的列表以及调用它的次数。我想包括自定义指令和内置指令(如ng-if)。
我采用了以不同方式检测Angular源代码的方法(例如,通过向addDirective添加计数器)。但是,到目前为止我尝试的所有内容似乎都不足以计算指令。
是否有人熟悉Angular内部人员?如果是这样,你知道一个很好的方法吗?
答案 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
模块中可以在用户模块中修补。