[英]From my directive, how can I manually trigger a digest cycle on my parent scope?
[英]How can I prevent to watchers from firing in the same digest cycle?
我想在我的字符串chartTitle
或對象chartOptions
任何屬性發生更改時調用函數drawChart()
。
單獨觀看它們很容易:
$scope.$watch('chartTitle', drawChart);
$scope.$watchCollection('chartOptions', drawChart);
但是,我需要一種方法將它們組合成一個$watch
的語句(不添加chartTitle
作為一個屬性chartOptions
。
如何防止這兩個監視程序在同一摘要周期內觸發。 也就是說,如果我改變都chartTitle
和財產chartOptions
,我怎么能防止drawChart
被調用兩次?
深入了解chartOptions
和chartTitle
。 不幸的是, chartOptions
是一個非常大且復雜的對象,因此,對這些屬性進行深入監視是不可行的。 可以限制深度嗎?
檢測在chartOptions
守望者是否chartTitle
已經消化此周期中被改變,反之亦然。 這有可能嗎?
找出一個監視表達式,該表達式將捕獲chartOptions
和chartTitle
所有屬性。
您可以進行深入了解:
$scope.$watch(
function() {
return {
chartTitle: $scope.chartTitle,
chartOptions: $scope.chartOptions
};
},
function(newval) {
...
},
true // deep watch
);
密切關注性能問題,它將在每個摘要周期創建一個對象。 通常這並不重要,但是對於重量級的應用程序則可能如此。
將chartTitle
和chartOptions
組合到一個對象中,然后對該對象執行$watchCollection
。
$scope.$watchCollection(function() {
// Make a shallow clone of all the properties in chartOptions
var amalgam = {};
for (var key in $scope.chartOptions) {
var val = $scope.chartOptions[key];
amalgam[key] = val;
}
// Add the chart title to our shallow clone
amalgam.chartTitle = $scope.chartTitle;
return amalgam;
}, drawChart);
請注意,這可能不是很快,因為每個摘要周期都在創建一個新對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.