2013-04-08 3 views
6

Ist es möglich für ein Kind $scope (isoliert oder nicht) zu tun $scope.$apply ohne den Parrent-Bereich angewendet wird?

Es gibt einige teure Berechnungen (die schwer zu cachen sind) im übergeordneten Bereich und ich brauche keine Winkel, um die Berechnung erneut auszuführen.

zum Beispiel:

<div ng-controller="ParentController"> 
{{ expensiveFunction() }} 
    <div directive> 
    <h1 ng-click="applyChildScopeOnly()">Click {{ value }}</h1> 
    </div> 
    <div directive> 
    <h1 ng-click="applyChildScopeOnly()">Click {{ value }}</h1> 
    </div> 
<button ng-click="applyChildrenScope()"/> <!-- apply to children scope only --> 
</div> 

Die Richtlinie:

module.directive('directive', ['$document','$rootScope', function ($document,$rootScope) { 

    return{ 
    restrict:'AE', 
    scope:{}, 
    link:function($scope, element, attrs){ 
     $scope.applyChildScopeOnly = function(){ 
      $scope.$apply(); // don't apply changes to $parent scope 
     }; 

    } 
    } 
}]); 

Antwort

7

Sie können $scope.$digest() rufen statt $scope.$apply() neu zu bewerten Uhren im aktuellen Bereich und alle seine Kinder. Wenn Sie $scope.$digest() anrufen, werden keine Uhren in einem Elternbereich ausgewertet.

Als eine Randnotiz, die $scope.$apply() ruft die $rootScope.$digest() hinter den Kulissen.

Mehr Infos hier:. http://docs.angularjs.org/api/ng $ rootScope.Scope

+0

wow .. Dint wissen! – ganaraj