8

Proszę spojrzeć na zrzucie ekranu podane poniżejAngularjs: dlaczego jest 3 obserwatorów dla 1 wiązania?

enter image description here

Jak widać na zrzucie ekranu powyżej istnieją # 3 Obserwowane dla pojedynczego wiązania.

Czy każdy może się zastanowić, dlaczego tak się dzieje?

P.S: Używam AngularJS Batarang do sprawdzania wydajności.

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>

Odpowiedz

1

myślę kątowa Batarang ma niewłaściwy licznik obserwatorów. Sprawdziłem z kilkoma różnymi źródłami, a wszystkie z wyjątkiem AngularJS Batarang pokazują mi pojedynczego obserwatora na twoim kodzie. Sprawdź tę question z funkcją:

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

I można sprawdzić Watchers rozszerzenie dla Chrome. Obie pokazują 1 watcher.

Powiązane problemy