Angularjs: почему есть 3 наблюдателя за 1 привязку?

Пожалуйста, взгляните на снимок экрана ниже

введите описание изображения здесь

Как вы можете видеть на скриншоте выше, есть 3 наблюдателя за одно привязку.

Может кто-нибудь объяснить, почему это так?

P.S: Я использую AngularJS Batarang для проверки производительности.

var app = angular.module('app', []);

app.controller('appCtrl', function ($scope, $timeout) {


    $scope.name = 'vikas bansal';

})
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
    <script src="app.js"></script>
</head>

<body>
    <div ng-app="app" ng-controller="appCtrl">
        {{name}}
    </div>
</body>

</html>
+8
источник поделиться
1 ответ

Я думаю, что Angular у Batarang есть неправильный счетчик наблюдателей. Я проверил несколько источников, и все, кроме AngularJS Batarang, показывают мне одного наблюдателя на вашем коде. Ознакомьтесь с этим question с функцией:

(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);
})();

И вы можете проверить Наблюдатели расширение для хром. Оба показывают 1 наблюдателя.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос