2013-10-06 52 views
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「編輯功能本身來評估的等價物舊的和新的價值。有沒有一個標誌可以用來確定兩個對象是否相同,還是有更好的方法來處理這種情況?

回答

4

嗨,你應該使用這個,

scope.$watch('data', function (newVal) { /*...*/ }, true); 

這已經在這裏answerd上stackoverflow

+0

正是我一直在尋找 - 可選的深比較論證。謝謝! – cmw

+0

沒問題,第一次遇到這個問題時有同樣的問題。只是不要忘記標記有幫助他人的答案。謝謝 – hjgraca

相關問題