(Ви , можливо , буде потрібно зміна bodyв htmlабо всюди , де ви кладете ng-app)
(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);
})();
Завдяки Ерілему за вказівку на цю відповідь бракувало $isolateScopeпошуку, і спостерігачі потенційно дублювались у його / її відповіді / коментарі.
Дякуємо Ben2307, що вказав, що, 'body'можливо, потрібно буде змінити.
Оригінал
Я робив те саме, за винятком перевірки атрибутів даних елемента 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');
}
}
}
І нічого не роздруковується, тому я здогадуюсь, що моя краща (оскільки вона знайшла більше годин) - але мені не вистачає інтимних кутових знань, щоб точно знати, що моя не є належним набором набору рішень.
$scopeмає набір $$ спостерігачів із кількістю спостерігачів на цьому контролері (добре, якщо у вас є ng-повторення або щось, що створює інший обсяг, це не дуже добре). Але я думаю, що немає можливості побачити всі годинники у всьому додатку.