( 을 넣은 곳이나 장소 를 바꿔야 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);
})();
실물
클래스가 아닌 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
은 해당 컨트롤러에 감시자 수와 함께 $$ watchers 배열을 가지고 있습니다. 그러나 전체 앱에서 모든 시계를 볼 수있는 방법이 없다고 생각합니다.