angularjs – 如何计算一个页面上的watch总数?
发布时间:2020-12-17 09:19:19 所属栏目:安全 来源:网络整理
导读:在JavaScript中有没有办法计算整个页面上的有角度的手表的数量? 我们使用Batarang,但它并不总是适合我们的需要。我们的应用程序很大,我们有兴趣使用自动化测试来检查观察计数是否增加太多。 在每个控制器基础上对手表进行计数也是有用的。 编辑:这里是我
在JavaScript中有没有办法计算整个页面上的有角度的手表的数量? 我们使用Batarang,但它并不总是适合我们的需要。我们的应用程序很大,我们有兴趣使用自动化测试来检查观察计数是否增加太多。 在每个控制器基础上对手表进行计数也是有用的。 编辑:这里是我的尝试。它在ng-scope类的所有内容中统计手表。 (function () { var elts = document.getElementsByClassName('ng-scope'); var watches = []; var visited_ids = {}; for (var i=0; i < elts.length; i++) { var scope = angular.element(elts[i]).scope(); if (scope.$id in visited_ids) continue; visited_ids[scope.$id] = true; watches.push.apply(watches,scope.$$watchers); } return watches.length; })(); (你可能需要改变身体到HTML或你放置你的ng应用程序) (function () { var root = angular.element(document.getElementsByTagName('body')); var watchers = []; var f = function (element) { angular.forEach(['$scope','$isolateScope'],function (scopeProperty) { if (element.data() && element.data().hasOwnProperty(scopeProperty)) { angular.forEach(element.data()[scopeProperty].$$watchers,function (watcher) { watchers.push(watcher); }); } }); angular.forEach(element.children(),function (childElement) { f(angular.element(childElement)); }); }; f(root); // Remove duplicate watchers var watchersWithoutDuplicates = []; angular.forEach(watchers,function(item) { if(watchersWithoutDuplicates.indexOf(item) < 0) { watchersWithoutDuplicates.push(item); } }); console.log(watchersWithoutDuplicates.length); })(); >感谢erilem指出这个答案缺少$ isolateScope搜索和观察者可能在他/她的答案/评论中重复。 原版的 我做了同样的事情,除了我检查的HTML元素的数据属性,而不是它的类。我在这里跑你的: http://fluid.ie/ 得到83.我跑了,得到121。 (function () { var root = $(document.getElementsByTagName('body')); var watchers = []; var f = function (element) { if (element.data().hasOwnProperty('$scope')) { angular.forEach(element.data().$scope.$$watchers,function (watcher) { watchers.push(watcher); }); } angular.forEach(element.children(),function (childElement) { f($(childElement)); }); }; f(root); console.log(watchers.length); })(); 我也把这个在我的: for (var i = 0; i < watchers.length; i++) { for (var j = 0; j < watchers.length; j++) { if (i !== j && watchers[i] === watchers[j]) { console.log('here'); } } } 没有什么打印出来,所以我猜我的是更好的(因为它发现更多的手表) – 但我缺乏亲密的角度知识,知道我肯定不是解决方案集的一个适当的子集。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |