2013-04-08 4 views
6

Czy jest możliwe, aby dziecko $scope (izolowane lub nie) wykonywało $scope.$apply bez zastosowania zakresu narodu?

Istnieje kilka kosztownych obliczeń (które są trudne do buforowania) w zakresie nadrzędnym i nie potrzebuję wartości kątowych, aby ponownie wykonać obliczenia.

na przykład:

<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> 

dyrektywy:

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

    } 
    } 
}]); 

Odpowiedz

7

Można zadzwonić $scope.$digest() zamiast $scope.$apply() do ponownej oceny zegarki w bieżącym zakresie i wszystkie jego dzieci. Dzwoniąc pod numer $scope.$digest(), nie oceniaj zegarków na żadnych elementach nadrzędnych.

Na marginesie: $scope.$apply() wywołuje za kulisami .

Więcej informacji tutaj. http://docs.angularjs.org/api/ng $ rootScope.Scope

+0

wow .. Dint wiem! – ganaraj