0
我已經構建了一個指令,通過$parse
從我的$attrs
之一的Angular表達式獲取其數據。該表達式通常是應用於列表模型的簡單過濾器,其修改時將對其父母$scope
的評估進行更改。
來監控它應該更新它使用的數據,我的指令使用$scope.$watch
電話,與重新$ parse
的表達的自定義函數。我遇到的問題是$parse
將從表達式中生成一個新的對象實例,因此即使每個對象中的數據完全等效,$watch
也會看到該值已更改。由於$watch
回調中採取的操作,導致我的代碼非常快速地觸及$digest
迭代上限。
爲了解決這個問題,我做以下,目前:
var getter = $parse($attrs.myExpression);
$scope.$watch(function() {
var newVal = getter($scope);
if (JSON.stringify($scope.currentData) !== JSON.stringify(newVal)) {
return newVal;
} else {
return $scope.currentData;
}
}, function (newVal) {
$scope.currentData = newVal;
// other stuff
});
不過,我不喜歡依靠JSON
作爲中介這裏,也不是用我的$watch
「編輯功能本身來評估的等價物舊的和新的價值。有沒有一個標誌可以用來確定兩個對象是否相同,還是有更好的方法來處理這種情況?
正是我一直在尋找 - 可選的深比較論證。謝謝! – cmw
沒問題,第一次遇到這個問題時有同樣的問題。只是不要忘記標記有幫助他人的答案。謝謝 – hjgraca