2013-04-08 7 views
6

E 'possibile che un bambino $scope (isolato o non) esegua $scope.$apply senza applicare l'ambito per argomento?

C'è un calcolo costoso in corso (che è difficile da memorizzare nella cache) nell'ambito genitore e non ho bisogno di angolare per rieseguire il calcolo nuovamente.

per esempio:

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

La direttiva:

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

    } 
    } 
}]); 

risposta

7

È possibile chiamare $scope.$digest() invece di $scope.$apply() di rivalutare orologi nell'ambito corrente e tutti i suoi figli. Chiamando $scope.$digest() non valuterà alcun orologio su qualsiasi ambito genitore.

Come nota a margine, lo $scope.$apply() chiama il numero $rootScope.$digest() dietro le quinte.

Maggiori informazioni qui:. http://docs.angularjs.org/api/ng $ rootScope.Scope

+0

wow .. Dint so che! – ganaraj

Problemi correlati