2015-07-28 53 views
0

我想清除$scope variable裏面的$watch功能。但它不起作用。我怎樣才能實現這一個?

$scope.$watch('selectedEmployee', function (value) { 
    //do some stuffs 
    ------- 
    ------- 
    ------- 
    $scope.selectedEmployee ={};//clearing variable 
} 

此代碼無法使用。

+1

,將導致無限消化循環。這感覺就像一個XY問題;爲什麼你需要*觀察一個變量的變化,然後立即清除它? – Claies

+0

一旦選擇了員工,我正在執行一些操作並清理員工以獲取更改以選擇新員工。 – gsk

+0

可能你應該從[doc](https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch)將'true'標誌加到'$ watch':_When objectEquality == true, watchExpression的不等式是根據angular.equals function_ – Grundy

回答

0

我同意一般的意見,看一個變量,然後改變其自己的手錶處理程序內的變量,很少是一個好主意。但是,可能會有一些模糊的用例,其中一個人想要這樣做。

以避免無限循環消化,你應該確保引用被保留,而穩定:

var empty = {}; 
$scope.$watch('selectedEmployee', function (value) { 
    if (value != empty) { 
     //do some stuffs 
     ------- 
     ------- 
     ------- 
     $scope.selectedEmployee = empty;//clearing variable 
    }  
} 

這應該工作,因爲該值會穩定下來,以一個空的參考,當消化循環運行。

但是,這種方法仍然存在潛在的問題 - 您的範圍模型中應該有一個「點」以確保它解析爲正確的參考。否則,當您使用賦值覆蓋範圍引用時,可以在作爲原始範圍變量的副本的直接範圍上創建變量的副本。

下面是一個改進的例子:

var empty = {}; 
$scope.my = { selectedEmployee = {} }; 
$scope.$watch('my.selectedEmployee', function (value) { 
    if (value != empty) { 
     //do some stuffs 
     ------- 
     ------- 
     ------- 
     $scope.my.selectedEmployee = empty;//clearing variable 
    }  
} 
+0

不適用於我的情況.. – gsk

相關問題