(आपको अपने स्थान 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);
})();
इस उत्तर को इंगित करने के लिए erilem के लिए धन्यवाद, $isolateScope
खोज को याद कर रहा था और देखने वालों को संभवतः उसके उत्तर / टिप्पणी में दोहराया जा रहा था।
यह इंगित करने के लिए कि 'body'
परिवर्तन करने की आवश्यकता हो सकती है, इसके लिए Ben2307 का धन्यवाद ।
मूल
मैंने ऐसा ही किया, सिवाय इसके कि मैंने अपनी कक्षा के बजाय 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
पास उस नियंत्रक पर देखने वालों की संख्या के साथ $ $ वॉचर सरणी होती है (ठीक है, अगर आपके पास कुछ एनजी-रिपीट या ऐसा कुछ है जो एक और गुंजाइश बनाता है, जो उस अच्छे काम नहीं करता है)। लेकिन मुझे लगता है कि पूरे ऐप में सभी घड़ियों को देखने का कोई तरीका नहीं है।