2015-08-22 194 views
0

時選擇性控制角$手錶射擊我想用角$watch檢查的變化在這樣一個對象:比較對象

$scope.$watch(function(scope) { return scope.selectedTopic }, 
    function(newVal, oldVal){ 
    if (newVal !== oldVal) { 
     $scope.hasChanges = true; 
    } 
    }, true); 

的問題是,這個變量$scope.selectedTopic是當前的佔位符主題在我的應用程序。因此,如果用戶選擇了另一個主題,應用覆蓋$scope.selectedTopic完全有factory

TopicService.get(id).success(function(data){ 
    $scope.selectedTopic.content = data; 
}); 

所以我想有效地阻擋$watcholdVal VS newVal比較,只有當factory被調用。

我嘗試添加一個布爾變量關掉比較像這樣:

$scope.$watch(function(scope) { 
    if (scope.isLoadingFromFactory) return scope.selectedTopic 
    }, function(newVal, oldVal){ 
    if (newVal !== oldVal) { 
     $scope.hasChanges = true; 
    } 
    }, true); 

TopicService.get(id).success(function(data){ 
    $scope.isLoadingFromFactory = false; 
    $scope.selectedTopic.content = data; 
    $scope.isLoadingFromFactory = true; 
}); 

,但沒有奏效。有沒有辦法打開/關閉$ watch不等式測試?

回答

0

我不是100%確定這是你需要的,但你應該能夠像這樣取消註冊手錶。你只需要一個機制在適當的時候添加它。

var unreg = $scope.$watch(function(scope) { 
     return scope.selectedTopic; 
    }, 
    function(newVal, oldVal){ 
     if($scope.isLoadingFromFactory) { 
      unreg(); 
      return; 
     } 

     if (newVal !== oldVal) { 
      $scope.hasChanges = true; 
     } 
    }, true); 

也許

$scope.$watch(function(scope) { return scope.selectedTopic }, 
    function(newVal, oldVal){ 
    if (!$scope.isLoadingFromFactory && newVal !== oldVal) { 
     $scope.hasChanges = true; 
    } 
}, true);