我想訂閱ngChange事件,但是來自代碼而不是標記。也就是說,給定一個$ scope和一個可以通過ngModel綁定的表達式,我想通過綁定到該表達式的任何ngModel指令來訂閱對該表達式所做的任何更改。這可能嗎?
類似:
$scope.field = "hello";
$scope.onButtonClick = function() {
$scope.field = "button clicked!";
}
// this callback is only when the user types in an input bound to field
// not when they click the button with ng-click="onButtonClick()"
$scope.$watchNgChange("field", function() {
console.log("user caused field to change via a binding");
});
// this callback is called for both ngModel binding changes and onButtonClick.
$scope.$watch("field", function() {
console.log("field was changed");
});
我不能只用$手錶,因爲這將捕獲所有的變化,包括從數據庫加載數據,從納克單擊回調,並從開始變化$監視其他表達式的回調(在這種情況下,如果有任何循環引用,那麼很容易讓$ watch回調進入無限循環並在10個摘要循環後出錯),以及誰知道還有什麼。
我的級聯更新依賴關係圖在其中有周期,而$ watch的非確定性特性使得無法在所有情況下都正確地遍歷圖,例如確保每個節點只針對情況A處理一次,但允許它在場景B中被處理兩次。另外,舊的!=新的檢查不足以終止無限的$摘要循環,除了最微不足道的用例外。如果取決於我,我只會使用ngChange並完成它,但這不取決於我,我正在尋找解決方法。 –
將此標記爲答案 - 因爲我開始相信我的想法並不是一個好的開始。感謝您的解決方案建議。我會研究它。 –