获取应用/模块中的绑定总数

时间:2013-10-15 15:57:25

标签: angularjs

有没有办法让你的模块在任何模板上使用的绑定总数(通过模板&{39; {{ .. }} / ng-xxx="..."$scope.$watch(...)等连接)时间点?

2 个答案:

答案 0 :(得分:8)

您应该能够使用document.getElementsByClassName("ng-binding").length大致了解一下。正如here所解释的,此类适用于具有{{ ... }}ng-bind绑定的元素,因此您可以使用绑定来获取数字或元素。它会遗漏任何未经这种方式定义的内容。

所有表达式绑定都应该使用$parse来解释表达式,这样如果您对临时度量感到满意,可以尝试在角度源代码中为此服务添加一些调试代码。创建绑定时应该很容易看到,但是当它被销毁时更难以看到。

查看当前版主,看起来$parse将会更改为1.2.0,这可能会让Chrome更容易。为此,您应该能够使用Chrome开发人员工具拍摄堆快照(来自“个人资料”标签),并使用Parser构造函数搜索所有对象。

您还可以使用类似的内容查看应用中的观察者数量

var watchersPerScope = $('.ng-scope').map(function() {
  var s = $(this).scope();
  if(s.$$destroyed) return 0;
  return (s.$$watchers || 0) && s.$$watchers.length;
}).get();
var totalWatchers = 0;
for(var i=0; i<watchersPerScope.length; i++)
  totalWatchers += watchersPerScope[i];
console.log(totalWatchers);

我发现这些都不是解决你问的好方法,但它们至少是一些东西。最后一个建议是,如果出于性能原因这样做,那么Chrome的Batarang有一个非常好的性能部分。


在较新版本的angular(1.3.2+)中,您也可以使用

$rootScope.$countWatchers();

如果您在页面中包含ngMock模块。请参阅文档here

答案 1 :(得分:2)

以下是有关如何使用浏览器控制台随时执行此操作的文章。如果您已经引导了多个应用程序,那么该文章还包含了获取绑定数量的代码。

http://intervalia.blogspot.com/2015/01/how-to-determine-number-of-bindings-in.html