2013-04-08 2 views
6

子供は$scope(隔離されているかどうか)で、範囲スコープを適用しないで$scope.$applyを実行できますか?

親スコープでは(キャッシュするのが難しい)高価な計算がいくつかあり、計算をもう一度やり直す必要はありません。例えば

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

ディレクティブ:

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

    } 
    } 
}]); 

答えて

7

あなたが再評価現在のスコープ内の時計とそのすべての子に$scope.$digest()代わりの$scope.$apply()を呼び出すことができます。 $scope.$digest()を呼び出すと、親スコープの時計は評価されません。

補足として、$scope.$apply()は舞台裏で$rootScope.$digest()と呼ばれています。

詳細:。http://docs.angularjs.org/api/ng $ rootScope.Scope

+0

すごい..くぼみはそれを知っています! – ganaraj

関連する問題