我同意一般的意見,看一個變量,然後改變其自己的手錶處理程序內的變量,很少是一個好主意。但是,可能會有一些模糊的用例,其中一個人想要這樣做。
以避免無限循環消化,你應該確保引用被保留,而穩定:
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
}
}
,將導致無限消化循環。這感覺就像一個XY問題;爲什麼你需要*觀察一個變量的變化,然後立即清除它? – Claies
一旦選擇了員工,我正在執行一些操作並清理員工以獲取更改以選擇新員工。 – gsk
可能你應該從[doc](https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch)將'true'標誌加到'$ watch':_When objectEquality == true, watchExpression的不等式是根據angular.equals function_ – Grundy