[英]variable change not notified to `$scope.$watch`
我正在通過角度指令+控制器處理JQRangeSlider 。
在我的控制器中,我正在為范圍變量分配新值,但是即使更改已正確更新,也不會通知控制器范圍(我在指令中使用隔離的范圍'='
)。
// JQRangeSlider event handler
var valuesChanged = function(e, data) {
if (data.values.min && data.values.max) {
console.log('values changed', data.values); // this is always printed
$scope.minselectedtime = data.values.min; // not triggering $scope.$watch
$scope.maxselectedtime = data.values.max;
$scope.$broadcast('minchanged', $scope.minselectedtime); // instantly triggering $scope.$on('minchanged',...)
console.log('scope', $scope);
}
};
$scope.$watch('minselectedtime', function(newValue, oldValue) {
if (newValue === oldValue) {
return;
}
console.log('minselectedtime -->', newValue);
}, true);
$scope.$on('minchanged', function(event, min) {
console.log('minchanged ==>', min);
});
$scope.$watch('minselectedtime', ...)
僅在下一次$scope
修改時觸發(其中$scope.minselectedtime
甚至都沒有修改):
$scope.toggleTimeScale = function(refinementString) {
console.log('scale set to', refinementString);
$scope.timescale = refinementString; // year, month, day...
}
為什么沒有立即將$scope.$watch
通知變量更改?
隔離的代碼的$scope.minselectedtime
值已更改,但是在觸發$scope.toggleTimeScale
之前,父作用域不會更改其值。
您使用$ scope。$ apply()的方法是正確的。 原因是來自JQRangeSlider的更新發生在angularjs知識的“外部”。 如果閱讀有關$ apply方法的文檔( http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply ),您會發現它在需要的情況下使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.